基于Annotation的Spring AOP: @AfterReturning
2013年08月03日 06:20:37
阅读数:7916
AfterReturning 增强处理将在目标方法正常完成后被织入。
使用@AfterReturning可指定如下两个属性:
① pointcut / value : 两者都用于指定该切入点对应的切入表达式
② returning : 指定一个返回值形参名,增强处理定义的方法可通过该行参名来访问目标方法的返回值。
Person.java :
-
public interface Person {
-
public String sayHello(String name);
-
public void eat(String food);
-
}
Chinese.java :
-
import org.springframework.stereotype.Component;
-
@Component
-
public class Chinese implements Person {
-
@Override
-
public void eat(String food) {
-
System.out.println("我正在吃:"+food);
-
}
-
@Override
-
public String sayHello(String name) {
-
System.out.println("sayHello方法被执行了");
-
return name+"Hello,Spring AOP";
-
}
-
}
AfterReturningAdviceTest.java :
-
import org.aspectj.lang.annotation.AfterReturning;
-
import org.aspectj.lang.annotation.Aspect;
-
/**
-
* 定义一个切面
-
* @author Administrator
-
*
-
*/
-
@Aspect
-
public class AfterReturningAdviceTest {
-
@AfterReturning(returning="rvt",pointcut="execution(* com.bean.*.*(..))")
-
public void log(Object rvt){
-
System.out.println("获取目标方法返回值:"+rvt);
-
System.out.println("模拟记录日志的功能...");
-
}
-
}
bean.xml :
-
<?xml version="1.0" encoding="UTF-8"?>
-
<beans xmlns="http://www.springframework.org/schema/beans"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xmlns:context="http://www.springframework.org/schema/context"
-
xmlns:aop="http://www.springframework.org/schema/aop"
-
xmlns:tx="http://www.springframework.org/schema/tx"
-
xsi:schemaLocation="http://www.springframework.org/schema/beans
-
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-
http://www.springframework.org/schema/context
-
http://www.springframework.org/schema/context/spring-context-2.5.xsd
-
http://www.springframework.org/schema/tx
-
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
-
http://www.springframework.org/schema/aop
-
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
-
<context:component-scan base-package="com.bean">
-
<context:include-filter type="annotation"
-
expression="org.aspectj.lang.annotation.Aspect"/>
-
</context:component-scan>
-
<aop:aspectj-autoproxy/>
-
</beans>
Test.java :
-
public class Test {
-
public static void main(String[] args) {
-
ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
-
Person p=(Person) ctx.getBean("chinese");
-
System.out.println(p.sayHello("张三"));
-
p.eat("西瓜");
-
}
-
}
运行控制台输出: