第一次配置的aop类如下
public class AopTest1 {
private static Logger log = LoggerFactory.getLogger(AopTest1.class);
public void before(){
log.info("+++++++++before...........1+++++++++");
}
public void after(){
log.info("+++++++++after...........1+++++++++");
}
public void afterReturn(){
log.info("+++++++++afterReturn..........1+++++++++");
}
public void afterThrow(){
log.info("+++++++++afterThrow...........1+++++++++");
}
public void around(){
log.info("+++++++++around............1+++++++++");
}
}
public class AopTest { private static Logger log = LoggerFactory.getLogger(AopTest1.class); public void before(){ log.info("+++++++++before...........1+++++++++"); } public void after(){ log.info("+++++++++after...........1+++++++++"); } public void afterReturn(){ log.info("+++++++++afterReturn..........1+++++++++"); } public void afterThrow(){ log.info("+++++++++afterThrow...........1+++++++++"); } public void around(){ log.info("+++++++++around............1+++++++++"); }
studet类
xml配置
<aop:config expose-proxy="true"> <aop:aspect id="asp" ref="aopTest" order="2"> <aop:pointcut id="pt" expression="@annotation(factory.Student2)"/> <aop:before method="before" pointcut-ref="pt"/> <aop:after method="after" pointcut-ref="pt"/> <aop:after-returning method="afterReturn" pointcut-ref="pt"/> <aop:after-throwing method="afterThrow" pointcut-ref="pt"/> <aop:around method="around" pointcut-ref="pt"/> </aop:aspect> </aop:config>
<aop:config expose-proxy="true"> <aop:aspect id="asp1" ref="aopTest1" order="1"> <aop:pointcut id="pt1" expression="@annotation(factory.Student1)"/> <aop:before method="before" pointcut-ref="pt1"/> <aop:after method="after" pointcut-ref="pt1"/> <aop:after-returning method="afterReturn" pointcut-ref="pt1"/> <aop:after-throwing method="afterThrow" pointcut-ref="pt1"/> <aop:around method="around" pointcut-ref="pt1"/> </aop:aspect> </aop:config>
测试类 public static void main(String[] args){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Student student = (Student) context.getBean("student"); log.info(student.getName()); student.setName("test"); }
测试结果:(注意为打印name)
根据现象是第二个切面没有执行,实际上是在around方法中没有返回值,把around方法中返回数值就一切正常了。
修改之后运行的结果为: