`
思念-悲伤
  • 浏览: 25114 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

编写aop:around时出现的异常org.springframework.aop.AopInvocationException:

阅读更多

 Exception in thread "main"org.springframework.aop.AopInvocationException: Null return value from advice does not match primitive return type for: public boolean org.spring.aop.User.login(java.lang.String,java.lang.String)
at org.springframework.aop.framework.CglibAopProxy.processReturnType(CglibAopProxy.java:351)
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:83)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:646)
at org.spring.aop.User$$EnhancerBySpringCGLIB$$db4a87bb.login(<generated>)

at lee.UserApp.main(UserApp.java:14)

在编写aop代码时,出现了上述的异常。我使用的是around类型的通知方法:我的aop代码如下:

 

package org.spring.aop;

import org.aspectj.lang.ProceedingJoinPoint;

public class LoginService {
	public void enter(String account,String password){
		System.out.println("some one ....");
		System.out.println("账号:"+account);
		System.out.println("密码:"+password);
	}
	
public void leave(ProceedingJoinPoint joinpoint,String account,String password) throws Throwable{
		System.out.println("-------------------调用通知之前,around-------------");
		Object obj = joinpoint.proceed();
		System.out.println("------------------调用通知之后,around--------------");
		System.out.println("Is s ucceeded?" + obj);
		obj=false;
//		return obj;
	}
}
	public boolean login(String account,String password){
		System.out.println("--------login-------------");
		return this.account.equals(account)&&
				this.password.equals(password);
	}

出错的原因是因为:org.springframework.aop.AopInvocationException: Null return value from advice does not match primitive return type for: public boolean org.spring.aop.User.login(java.lang.String,java.lang.String)

即:在调用around的时候,原方法的返回值(也就是你要织入的方法)与通知的返回值不一致。

从代码中看出:我是void 没有返回值,而我的login的方法是由返回值的!

所以修改方法是:aop代码中leave方法的返回值类型改为与织入方法返回值一样的类型。

我上面的代码修改方法是:把void 改为 Object。

分享到:
评论

相关推荐

    org.springframework.aop

    除了Spring内置的AOP支持,Spring还提供了对AspectJ的完全支持,包括编译时和运行时的切面织入。AspectJ的语法更为强大,可以定义更复杂的切点,并且支持类型级别的通知,即可以在类声明、构造器或属性级别定义通知...

    springAOP demo 带错误解决文档

    nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: ...

    org.aspectj.lang.annotation.Around所需要的包

    &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-aop &lt;version&gt;5.x.x.RELEASE&lt;/version&gt; &lt;!-- 使用适当的版本号 --&gt; &lt;groupId&gt;org.aspectj &lt;artifactId&gt;aspectjrt &lt;version&gt;1.x.x&lt;/version&gt; &lt;!-- 使用...

    spring aop的两种配置方式.docx

    http://www.springframework.org/schema/aop/spring-aop.xsd"&gt; &lt;!-- 定义切面 --&gt; &lt;bean id="myAspect" class="com.example.MyAspect"&gt; &lt;!-- 配置通知 --&gt; &lt;aop:config&gt; &lt;aop:aspect ref="myAspect"&gt; &lt;aop:...

    Spring AOP配置源码

    import org.springframework.stereotype.Component; @Component("userDAO") public class UserDao { public void say() { System.out.println("say method is called"); } public void smile() { System.out...

    spring mvc框架下的aop例子

    然后,我们使用`@Before`、`@AfterReturning`、`@AfterThrowing`和`@Around`注解定义了四种不同的通知,分别在方法执行前、正常返回后、抛出异常后和环绕方法执行时进行处理。 请注意,以上代码仅为示例,实际应用...

    spring1.x使用AOP实例

    最后,Spring 1.x的AOP支持还允许自定义切点表达式,这是通过实现`org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator`类并注册到Spring容器来完成的。这种方式使得基于注解的切面...

    XML配置SpringAOP共2页.pdf.zip

    http://www.springframework.org/schema/aop/spring-aop.xsd"&gt; ``` 接下来,定义一个切面(Aspect),这是AOP的核心概念。切面通常包含一个或多个通知(Advice),它们是在特定连接点(Join Point)执行的代码。...

    spring aop 实现源代码--xml and annotation(带lib包)

    顾名思义,Before Advice会在目标对象的方法执行之前被调用,您可以通过实现org.springframework.aop.MethodBeforeAdvice接口来实现Before Advice的逻辑,接口定义如下: java 代码 1. package org.spring...

    spring5aop注解需要jar

    http://www.springframework.org/schema/aop/spring-aop.xsd"&gt; &lt;aop:aspectj-autoproxy/&gt; &lt;!-- 切面类配置 --&gt; &lt;bean id="myAspect" class="com.example.MyAspect"/&gt; ``` 5. **编写切面类**: 创建一个类...

    spring-aop.xsd

    总的来说,`spring-aop.xsd`是Spring AOP配置的基础,它帮助开发者理解并正确编写AOP配置,提升开发效率。通过学习和熟练掌握其背后的原理和用法,开发者可以更好地利用面向切面编程来组织和管理代码,降低系统的...

    Spring AOP详细介绍.docx

    //www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"&gt; &lt;aop:aspectj-autoproxy/&gt; &lt;!-- 其他 Bean 的配置,包括 Operator 切面类和 Service 实现类的配置 --&gt;四 ...

    SpringAop xml方式配置通知

    http://www.springframework.org/schema/aop/spring-aop.xsd"&gt; &lt;!-- 定义切面 --&gt; &lt;bean id="myAspect" class="com.example.aspect.MyAspect"/&gt; &lt;!-- 配置AOP --&gt; &lt;aop:config&gt; &lt;!-- 定义切入点表达式 --&gt; ...

    spring_aop

    http://www.springframework.org/schema/aop/spring-aop.xsd"&gt; &lt;!-- 配置目标对象 --&gt; &lt;bean id="targetBean" class="com.example.TargetBean"/&gt; &lt;!-- 配置切面 --&gt; &lt;aop:config&gt; &lt;!-- 定义切点表达式 --&gt; ...

    spring 2.0使用AOP实例(基于Annotation的配置方式)

    这些注解分别对应于方法调用前、后、成功返回、抛出异常时和包围整个方法调用。 ```java @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore...

    spring-aop实例demo

    http://www.springframework.org/schema/aop/spring-aop.xsd"&gt; &lt;aop:aspectj-autoproxy /&gt; ``` 2. **定义切面**:创建一个Java类作为切面,该类通常会包含一个或多个通知方法。这些方法需要使用`@Before`, `...

    spring入门学习-6、AOP几种配置方式详解.pdf

    - **异常通知**:`org.springframework.aop.ThrowsAdvice` 是一个接口,定义了在目标方法抛出异常后执行的操作。 ##### 2.2 ProxyFactoryBean 配置注意事项 - **代理类型选择**:当被代理的类没有实现任何接口时,...

    Spring AOP依赖jar包

    http://www.springframework.org/schema/aop/spring-aop.xsd"&gt; &lt;!-- 启用 AOP --&gt; &lt;aop:config&gt; &lt;aop:aspect id="loggingAspect" ref="loggingService"&gt; &lt;!-- 定义切入点 --&gt; &lt;aop:pointcut id=...

    spring-aop源码

    这些通知通过`org.springframework.aop.MethodBeforeAdvice`、`org.springframework.aop.AfterReturningAdvice`等接口实现。 三、连接点(Join Point) 连接点是程序执行中的一个特定点,例如方法的调用。在Spring ...

    基于注解配置和使用spring AOP(spring mvc框架)

    http://www.springframework.org/schema/aop/spring-aop.xsd"&gt; &lt;aop:aspectj-autoproxy/&gt; &lt;!-- 其他bean定义 --&gt; ``` 2. **定义切面**:创建一个带有@Aspect注解的Java类,并在其中定义通知。例如,下面的切...

Global site tag (gtag.js) - Google Analytics