最新公告
  • 欢迎您光临极客文库,登录获取更多编程学习资源及文章!立即加入我们
  • Spring AOP之传统AOP的动态代理

    自动代理的方式的介绍

    自动创建代理

    前面的开发案例中,每个代理都是同ProxyFactoryBean织入切面代理,在实际开发中,非常多的Bean每个都配置ProxyFactoryBena开发的维护量是巨大的,也是非常麻烦的。

    解决方案:自动创建代理

    – BeanNameAutoProxyCreator 根据Bean名称创建代理

    – DefaultAdvisorAutoProxyCreator 根据Advisor本身包含信息创建代理

    – AnnotationAwareAspectJAutoProxyCreator 基于Bean中的AspectJ注解进行自动代理

    基于Bean名称的自动代理

    对所有以DAO结尾的Bean所有方法使用代理

    代码演示

    新建一个demo5,从demo3和demo4中将下面这几个类拿过来

    新建一个配置文件applicationContext3.xml

    
    
    
        
        
        
    
        
        
        
    
        
            
            
        
    
    

    准备工作完成了,接下来我们进行测试,创建一个SpringDemo5

    package com.jikewenku.aop.demo5;
    
    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:applicationContext3.xml")
    public class SpringDemo5 {
        @Resource(name="studentDao")
        private StudentDao studentDao;
        @Resource(name="customerDao")
        private CustomerDao customerDao;
    
        @Test
        public void demo1(){
            studentDao.find();
            studentDao.save();
            studentDao.update();
            studentDao.delete();
    
            customerDao.find();
            customerDao.save();
            customerDao.update();
            customerDao.delete();
    
        }
    }
    

    接下来运行一下它,看具体实现的结果是什么

    如图,可以看到我们所有类的所有方法都使用了前置增强,也就是说根据目标类的名称然后自动来产生代理,这就是基于Bean名称的自动代理,这种方式比前面的方式更灵活一点,但是还有一点问题就是,如果我想增强这个类里面的save方法,那么应该怎么做呢?这种方式又不太合适了,下面我们再介绍一种比较合适的方式。

    基于切面信息的自动代理

    DefaultAdvisorAutoProxyCreator举例

    如果我们想对某些类里面的某些方法进行代理,我们就可以使用下面这种方式。

    配置环绕代理案例

    代码演示

    新建demo6,将demo5里的文件复制过来,新建一个配置文件applicationContext4.xml

    
    
    
        
        
        
    
        
        
        
    
        
        
            
            
        
    
        
    
    

    新建一个测试类SpringDemo6

    package com.jikewenku.aop.demo6;
    
    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:applicationContext4.xml")
    public class SpringDemo6 {
        @Resource(name="studentDao")
        private StudentDao studentDao;
        @Resource(name="customerDao")
        private CustomerDao customerDao;
    
        @Test
        public void demo1(){
            studentDao.find();
            studentDao.save();
            studentDao.update();
            studentDao.delete();
    
            customerDao.find();
            customerDao.save();
            customerDao.update();
            customerDao.delete();
    
        }
    }
    

    运行程序,观察结果。

    可以看到只有客户进行了环绕增强。

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

    常见问题FAQ

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

    参与讨论

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

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

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