编写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代码如下:

<span style="font-size:18px;">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 <span style="color:#ff0000;">void</span> 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;
	}
}</span>
<pre code_snippet_id="260288" snippet_file_name="blog_20140327_3_2103398" name="code" class="java">	<span style="font-size:18px;">public <span style="color:#ff0000;">boolean</span> login(String account,String password){
		System.out.println("--------login-------------");
		return this.account.equals(account)&&
				this.password.equals(password);
	}</span>
 

出错的原因是因为: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。


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值