Spring-AOP 自动创建代理
来源:互联网 发布:数据透视表多条件筛选 编辑:程序博客网 时间:2024/05/22 04:35
- 导读
- 概述
- 实现类介绍
- BeanNameAutoProxyCreator
- DefaultAdvisorAutoProxyCreator
- AnnotationAwareAspectJAutoProxyCreator
- AOP总结
导读
Spring-AOP 自动创建代理
Spring-AOP 自动创建代理之BeanNameAutoProxyCreator
Spring-AOP 自动创建代理之DefaultAdvisorAutoProxyCreator
Spring-AOP 自动创建代理之AnnotationAwareAspectJAutoProxyCreator
概述
我们通过前面几篇博文的案例,我们会发现都是通过ProxyFactoryBean创建织入切面的代理,每个需要被代理的Bean都需要使用一个ProxyFactoryBean进行配置。
幸好Spring提供了自动代理机制,让容器自动生成代理,把开发人员从繁琐的配置中解脱出来。在内部,Spring使用BeanPostProcessor自动完成这项工作
实现类介绍
基于BeanPostProcessor的自动代理创建器的实现类,将根据一些规则自动在容器实例化Bean时为匹配的Bean生成代理内容。
这些代理创建器可以分为3类
基于Bean配置名规则的自动代理创建器
允许为一组特定配置名的Bean自动创建代理实例的代理创建器,实现类为BeanNameAutoProxyCreator基于Advisor匹配机制的自动代理创建器
它会对容器中所有的Advisor进行扫描,自动将这些切面应用到匹配的Bean中(为目标Bean创建代理实例),实现类为DefaultAdvisorAutoProxyCreator基于Bean中的AspectJ注解标签的自动代理创建器
为包含AspectJ注解的Bean自动创建代理实例,实现类为AnnotationAwareAspectJAutoProxyCreator.
自动创建代理器实现类的继承图
可以清楚的看到所有的自动代理器类都实现了BeanPostPorcessor,在容器实例化Bean时,BeanPostProcessor将对它进行加工处理,所以自动代理创建器有机会对满足匹配规则的bean自动创建代理对象
BeanNameAutoProxyCreator
请参考另外一篇博文 Spring-AOP 自动创建代理之BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
请参考另外一篇博文 Spring-AOP 自动创建代理之DefaultAdvisorAutoProxyCreator
AnnotationAwareAspectJAutoProxyCreator
请参考另外一篇博文 Spring-AOP 自动创建代理之AnnotationAwareAspectJAutoProxyCreator
AOP总结
AOP是OOP的延伸,它为程序开发提供了一个崭新的思考角度,将可以重复性的横切逻辑抽取到统一的模块中,通过OOP的纵向抽象和AOP的横向抽取,程序才可以真正解决重复性代码问题。
Spring采用JDK动态代理和CGLib动态代理技术在运行期织入增强,所以不需要装备特殊的编译器或类装载器就可以使用AOP功能。
要使用JDK动态代理,目标类必须实现接口,而CGLib不对目标类作任何限制,它通过动态生成目标类子类的方式提供代理。
在JDK动态代理中通过接口来实现方法拦截,所以必须确保要拦截的目标在接口中有定义,否则将无法拦截
在CGLib动态代理中通过动态生成代理子类来实现方法拦截,所以必须确保要拦截的目标方法可以被子类访问,也就是目标方法必须定义为非final,且非私有实例方法。
JDK在创建代理对象时的性能高于CGLib,而生成的代理对象的运行性能却比CGLib低。 如果是singleton的代理,推荐使用CGlib动态代理。
Spring只能在方法级别上织入增强,Spring提供了4种类型的方法增强,分别是前置增强、后置增强、环绕增强、异常抛出增强,此外还有一种特殊的引介增强。 引介增强是类级别的,它为目标类织入新的接口实现。 从广义上将,增强其实是一种最简单的切面,它既包括横切代码又包括切点信息,只不过它的切点只是简单的方法相对位置信息。 所以增强一般需要和切点联合才可以表示一个更具实用性的切面。
在Spring中,普通的切点通过目标类名和方法名描述连接点的信息。 流程切点是比较特殊的切点,它通过方法调用堆栈的运行环境来决定连接点。 有时候需要通过切点的交叉或者合并描述一个最终的切点,可以使用ComposablePointcut的复合切点
切面是增强和切点的联合体,可以很方便的通过Spring提供的ProxyFactoryBean将切面自入不同的目标类中。 当然为每个目标类手工配置一个切面是比较繁琐的,Spring利用BeanPostProcessor可干涉Bean生命周期的机制,提供一些可以自动创建代理、自入切面的自动代理创建器,其中DefaultAdvisorAutoProxyCreator是功能强大的自动代理穿件器,它可以将容器中所有的Advisor自动织入目标Bean中。
- 【Spring AOP】自动创建代理
- Spring AOP 自动创建代理
- Spring-AOP 自动创建代理
- spring aop 自动创建代理BeanNameAutoProxyCreator详解
- 18、spring AOP自动创建代理bean
- Spring-AOP 自动创建代理之BeanNameAutoProxyCreator
- Spring-AOP 自动创建代理之DefaultAdvisorAutoProxyCreator
- Spring-AOP 自动创建代理之AnnotationAwareAspectJAutoProxyCreator
- spring aop 创建代理
- Spring AOP使用配置介绍(三):自动创建代理
- Spring AOP的自动代理
- Spring Aop(十四)——Aop自动创建代理对象的原理
- 第三章 AOP 自动创建代理
- Spring, 基于自动代理实现aop
- spring中AOP的自动代理
- Spring AOP 自动代理执行增强
- spring aop理解二:spring aop 注册和创建代理
- Spring之自动创建代理
- Android 三大图片缓存原理、特性对比
- 1159. 【NOI2002】银河英雄说(并查集)
- 接口自动化之thirdDay JsonGuolvTest 过滤掉某个字段的值 price
- 2017中国大学生程序设计竞赛
- Mapreduce二次排序实例
- Spring-AOP 自动创建代理
- 为MacOS升级vim至最新版
- 界面打飞机游戏,C语言
- c++常用知识点2
- Delphi Class of
- springMVC
- glibc free 死锁
- HDU-1540 Tunnel Warfare (线段树区间合并)
- java.net.SocketException四大异常解决方案