最新公告
  • 欢迎您光临极客文库,登录获取更多编程学习资源及文章!立即加入我们
  • Spring AOP之一般切面编程案例

    Spring AOP增强类型

    AOP联盟为通知Advice定义了org.aopalliance.aop.Interface.Advice

    Spring按照通知Advice在目标类方法的连接点位置,可以分为5类

    • -前置通知 org.springframework.aop.MethodBeforeAdvice
      • 在目标方法执行前实施增强
    • -后置通知 org.springframework.aop.AfterReturningAdvice
      • 在目标方法执行后实施增强
    • -环绕通知 org.aopalliance.intercept.MethodInterceptor
      • 在目标方法执行前后实施增强
    • -异常抛出通知 org.springframework.aop.ThrowsAdvice
      • 在方法抛出异常后实施增强
    • -引介通知 org.springframework.aop.IntroductionInterceptor
      • 在目标类中添加一些新的方法和属性

      Spring AOP切面类型

      Advisor:代表一般切面,Advice本身就是一个切面,对目标类所有方法进行拦截。

      PointcutAdvisor:代表具有切点的切面,可以指定拦截目标类哪些方法

      IntroductionAdvisor:嗲表引介切面,针对引介通知而使用切面(不要求掌握)

      Advisor切面案例

      ProxyFactoryBean常用可配置属性

      – target:代理的目标对象

      – proxyInterfaces:代理要试下你的接口

      如果多个接口可以使用以下格式赋值

      
          
          ……
      
      

      – proxyTargetClass:是否对类代理而不是接口,设置为true时,使用CGLib代理

      – interceptorNames:需要织入目标的Advice

      – singleton:返回代理是否为单实例,默认为单例

      – optimize:当设置为true时,强制使用CGLib

      一般切面案例代码演示

      pom.xml中引入两个包

      
        aopalliance
        aopalliance
        1.0
      
      
        org.springframework
        spring-aop
        4.2.4.RELEASE
      
      

      新建一个包demo3,创建一个接口StudentDao

      package com.jikewenku.aop.demo3;
      
      public interface StudentDao {
          public void find();
      
          public void save();
      
          public void update();
      
          public void delete();
      }
      

      编写实现类StudentDaoImpl

      package com.jikewenku.aop.demo3;
      
      public class StudentDaoImpl implements  StudentDao {
          public void find() {
              System.out.println("学生查询...");
          }
      
          public void save() {
              System.out.println("学生保存...");
          }
      
          public void update() {
              System.out.println("学生修改...");
          }
      
          public void delete() {
              System.out.println("学生删除...");
          }
      }
      

      新建一个MyBeforeAdvice实现MethodBeforeAdvice

      package com.jikewenku.aop.demo3;
      
      import org.springframework.aop.MethodBeforeAdvice;
      
      import java.lang.reflect.Method;
      
      public class MyBeforeAdvice implements MethodBeforeAdvice {
          public void before(Method method, Object[] args, Object target) throws Throwable {
              System.out.println("前置增强======================");
          }
      }
      

      新建一个Spring的配置文件applicationContext.xml

      
      
      
          
          
      
          
          
      
          
          
              
              
              
              
              
              
              
          
      
      

      接下来创建一个测试类

      package com.jikewenku.aop.demo3;
      
      import org.junit.Test;
      import org.junit.runner.RunWith;
      import org.springframework.test.context.ContextConfiguration;
      import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
      
      import javax.annotation.Resource;
      
      @RunWith(SpringJUnit4ClassRunner.class)
      @ContextConfiguration("classpath:applicationContext.xml")
      public class SpringDemo3 {
      
          @Resource(name="studentDao")
          private StudentDao studentDao;
      
          @Test
          public void demo1(){
              studentDao.find();
              studentDao.save();
              studentDao.update();
              studentDao.delete();
          }
      }
      

      运行一下程序,其实就是执行了最基本的增删改查操作

      当然上面的我们没有增强,接下来我们增强一下,修改上面的代码

      // @Resource(name="studentDao")
          @Resource(name="studentDaoProxy")
          private StudentDao studentDao;
      

      其他部分不变,然后再运行一下。

      可以看到在我们查询,保存,修改,删除之前都会执行前置增强,它会对我们目标类里的所有方法都进行增强。

    本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
    极客文库 » Spring AOP之一般切面编程案例

    常见问题FAQ

    如果资源链接失效了怎么办?
    本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
    如果用户分享的资源与描述不符怎么办?
    可以联系客服QQ:2580505920,如果要求合理可以安排退款或者退赞助积分。
    如何分享个人资源获取赞助积分或其他奖励?
    本站用户可以分享自己的资源,但是必须保证资源没有侵权行为。点击个人中心,根据操作填写并上传即可。资源所获收益完全归属上传者,每周可申请提现一次。
    如果您发现了本资源有侵权行为怎么办?
    及时联系客服QQ:2580505920,核实予以删除。

    参与讨论

    • 108会员总数(位)
    • 3700资源总数(个)
    • 5本周发布(个)
    • 2 今日发布(个)
    • 202稳定运行(天)

    欢迎加入「极客文库」,成为原创作者从这里开始!

    立即加入 了解更多
    成为赞助用户享有更多特权立即升级