Spring AOP-通知-后置通知

朱雀 2022-06-18 11:30 417阅读 0赞

AOP-通知-后置通知

工程用到的jar包:http://pan.baidu.com/s/1dFFw6at

接口

  1. package com.hk.spring.aop02;
  2. public interface SomeService {
  3. public void doFirst();
  4. public void doSecond();
  5. }

接口实现

  1. package com.hk.spring.aop02;
  2. public class SomeServiceImpl implements SomeService {
  3. @Override
  4. public void doFirst() {
  5. System.out.println("主业务doFirst");
  6. }
  7. @Override
  8. public void doSecond() {
  9. System.out.println("主业务doSecond");
  10. }
  11. }

后置通知类

  1. package com.hk.spring.aop02;
  2. import java.lang.reflect.Method;
  3. import org.springframework.aop.AfterReturningAdvice;
  4. import org.springframework.aop.MethodBeforeAdvice;
  5. /** * 前置通知 * @author 浪丶荡 * */
  6. public class MyAfterReturningAdvice implements AfterReturningAdvice {
  7. //在目标方法执行之后执行
  8. @Override
  9. public void afterReturning(Object returnValue, Method method,
  10. Object[] args, Object target) throws Throwable {
  11. System.out.println("后置通知执行");
  12. }
  13. }

配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
  3. <beans>
  4. <bean name = "someService" class="com.hk.spring.aop02.SomeServiceImpl"></bean>
  5. <!-- 注册通知 -->
  6. <bean name = "myAfterReturningAdvice" class="com.hk.spring.aop02.MyAfterReturningAdvice"></bean>
  7. <!-- 生成代理对象 -->
  8. <bean name = "serviceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
  9. <!-- 配置代理对象的目标对象属性 (类加载器)-->
  10. <property name="target" ref="someService"/>
  11. <!-- 或者这样配置 <property name="targetName" value="someService"/> -->
  12. <!-- 配置切面 (方法)-->
  13. <property name="interceptorNames" value="myAfterReturningAdvice"/>
  14. <!-- 接口通过private boolean autodetectInterfaces = true可以被找到 -->
  15. </bean>
  16. </beans>

测试

  1. package com.hk.spring.aop02;
  2. import org.junit.Test;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5. public class Mytest {
  6. @Test
  7. public void test1(){
  8. String resoure = "com/hk/spring/aop02/applicationContext.xml";
  9. ApplicationContext ac = new ClassPathXmlApplicationContext(resoure);
  10. SomeService someService = (SomeService) ac.getBean("serviceProxy");
  11. someService.doFirst();
  12. someService.doSecond();
  13. }
  14. }

结果

  1. 主业务doFirst
  2. 后置通知执行
  3. 主业务doSecond
  4. 后置通知执行

与前置通知的唯一区别就是实现的接口不同

发表评论

表情:
评论列表 (有 0 条评论,417人围观)

还没有评论,来说两句吧...

相关阅读