如果后置通知需要接收返回值那么
注意:返回值类型和后置通知方法接收返回值的参数名类型必须一致。
配置不使用接口的AOP
<!--配置不使用接口的AOP-->
<aop:config>
<!--
在指定切入点使用Log2完成前置通知和后置通知
-->
<aop:aspect ref="log2">
<!--配置切入点-->
<aop:pointcut id="qrd" expression="execution(* com.atstudy.controller.*.*(..))"/>
<aop:pointcut id="afterqrd" expression="execution(* com.atstudy.controller.*.update(..))"/>
<!--
配置前置通知:
在指定包中的所有类中的所有方法前执行的通知
添加Log2中的before方法,作为前置通知,并关联pointcut切入点
method属性表示Log2中的那个方法作为前置通知的方法
-->
<aop:before method="before" pointcut-ref="qrd"></aop:before>
<!--
配置最终通知:
在指定的包中的所有类的所有方法执行后执行
添加Log2中的after方法,作为最终通知,并关联pointcut切入点
-->
<aop:after method="after" pointcut-ref="qrd"></aop:after>
<!--
配置后置通知:
在指定的包中的所有类的所有方法执行完成后执行,并获取方法执行后的返回值
添加Log2中的afterReturing方法,作为后置通知,并关联一个切入点
returning属性表示指定在通知方法中获取方法返回值的参数名
注意:返回值类型和接收返回值的参数名类型必须一致。
-->
<aop:after-returning method="afterReturning" pointcut-ref="afterqrd" returning="value"></aop:after-returning>
</aop:aspect>
</aop:config>
UserController.java
public String update()
{
userService.update();
return "update()返回的值";
}
Log2.java
/**
* 用于后置通知
* 此处的String value可以获取有返回值方法的返回值,此处的参数类型要和切入点
* 方法返回值的类型一致
*/
public void afterReturning(String value)
{
System.out.println("后置通知..."+value);
}