基于Annotation的Spring AOP: @AfterReturning

基于Annotation的Spring AOP: @AfterReturning

2013年08月03日 06:20:37

阅读数:7916

AfterReturning 增强处理将在目标方法正常完成后被织入。

使用@AfterReturning可指定如下两个属性:

① pointcut / value : 两者都用于指定该切入点对应的切入表达式

returning : 指定一个返回值形参名,增强处理定义的方法可通过该行参名来访问目标方法的返回值。

Person.java :

 
  1. public interface Person {

  2. public String sayHello(String name);

  3. public void eat(String food);

  4. }

Chinese.java :

 
  1. import org.springframework.stereotype.Component;

  2.  
  3. @Component

  4. public class Chinese implements Person {

  5.  
  6. @Override

  7. public void eat(String food) {

  8. System.out.println("我正在吃:"+food);

  9. }

  10.  
  11. @Override

  12. public String sayHello(String name) {

  13. System.out.println("sayHello方法被执行了");

  14. return name+"Hello,Spring AOP";

  15. }

  16.  
  17. }

AfterReturningAdviceTest.java :

 
  1. import org.aspectj.lang.annotation.AfterReturning;

  2. import org.aspectj.lang.annotation.Aspect;

  3.  
  4. /**

  5. * 定义一个切面

  6. * @author Administrator

  7. *

  8. */

  9. @Aspect

  10. public class AfterReturningAdviceTest {

  11.  
  12. @AfterReturning(returning="rvt",pointcut="execution(* com.bean.*.*(..))")

  13. public void log(Object rvt){

  14. System.out.println("获取目标方法返回值:"+rvt);

  15. System.out.println("模拟记录日志的功能...");

  16. }

  17.  
  18. }

bean.xml :

 
  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <beans xmlns="http://www.springframework.org/schema/beans"

  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  4. xmlns:context="http://www.springframework.org/schema/context"

  5. xmlns:aop="http://www.springframework.org/schema/aop"

  6. xmlns:tx="http://www.springframework.org/schema/tx"

  7. xsi:schemaLocation="http://www.springframework.org/schema/beans

  8. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

  9. http://www.springframework.org/schema/context

  10. http://www.springframework.org/schema/context/spring-context-2.5.xsd

  11. http://www.springframework.org/schema/tx

  12. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

  13. http://www.springframework.org/schema/aop

  14. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

  15.  
  16.  
  17. <context:component-scan base-package="com.bean">

  18. <context:include-filter type="annotation"

  19. expression="org.aspectj.lang.annotation.Aspect"/>

  20. </context:component-scan>

  21.  
  22. <aop:aspectj-autoproxy/>

  23.  
  24. </beans>

Test.java :

 
  1. public class Test {

  2. public static void main(String[] args) {

  3.  
  4. ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");

  5. Person p=(Person) ctx.getBean("chinese");

  6. System.out.println(p.sayHello("张三"));

  7. p.eat("西瓜");

  8. }

  9. }

运行控制台输出:

猜你喜欢

转载自blog.csdn.net/f45056231p/article/details/81320155