AutoProxyCreator及其主要的家庭成员

AutoProxyCreator的关系图:

观察类图,我们可以看到AbstractAutoProxyCreate实现了Aware接口,BeanFactoryAware接口使之拥有容器的能力,BeanClassLoaderAware接口使之用于Bean类加载器的能力。

实现AopInfrastructureBean接口:代表该类免被AOP代理的标记接口.若BEan实现了此接口,表明它是一个Spring AOP的基础类,那么这个类是不会被AOP给代理的,即便它匹配pointcut表达式。

实现Ordered接口:使之能排序AutoProxyCreator和处理Aspect执行顺序。(Order值越小,执行优先级越高)

实现ProxyConfig类:该类是一个配置类,主要给后续的AutoProxyCreator或者用户自定义的AutoProxyCreator提供统一配置信息(具体可看类的成员变量)

AdvisedSupport类:本身不会提供任何创建动态代理的方法,只是专注于生成拦截器链(getInterceptorsAndDynamicInterceptionAdvice)委托给子类ProxyCreatorSupport去创建代理对象

ProxyCreatorSupport类:该类最重要的方法就是createAopProxy()方法。该方法主要创建Aop动态代理。创建动态代理还是委托给Aop代理工厂去创建。

ProxyProcessorSupport类:该类是SpringAOP的基础工具类,主要为后续的AutoProxyCreator集群提供一些公共方法的实现。该类最核心的方法就是evaluateProxyInterfaces。

             该方法主要的功能就是检查beanClass上的接口们。收集合法的接口,然后交给ProxyFactory处理

AnnotationAwareAspectJAutoProxyCreator类:当前最流行的注解模式:AOP动态代理创建器

  观察该类的方法,可以发现该类有任何动态代理的创建逻辑,连个Create都没有,而是一些零零碎碎的边角料方法,此时我们推断真正的创建逻辑并不在这里,而是存在它的父类上。该类仅提供一些跟注解相关的逻辑,比如findCandidateAdvisors方法,主要就是用来查找被@Aspect标签标记的类,并将其转换成多个advisors。(关于advisor这个类是Spring自创的概念,传统的AOP行话里是没有这个概念的,因为Advisor类下只持有一个PointCut和一个Advice)(AOP在处理横切逻辑的时候会把Aspect给转换成多个Advisor,然后将Aspect里的PointCut和Advisor壹壹对应起来)那么我们去观察他的父类(AspectJAwareAdvisorAutoProxyCreator)

AspectJAwareAdvisorAutoProxyCreator:在AnnotationAwareAspectJAutoProxyCreator类出来之前,我们主要是通过这个类来实现xml配置版的AspectJ切面自动代理创建。

 按理来说创建的逻辑的相当复杂的,但是观察这个类的方法发现并不复杂,只有边边角角的方法。该类中的sortAdvisors方法是针对Advisor的排序方法。souldSkip方法主要是从容器中发现切面类,并将切面类解析成一个个Advisors

既然该类没有相关的创建逻辑,那我们继续观察它的父类(AbstractAdvisorAutoProxyCreator)

AbstractAdvisorAutoProxyCreator:

观察这个类的方法,我们还是没有发现主要的创建逻辑。该类中的getAdvicesAndAdvisorsForBean()方法。该方法主要为某个bean去获取对应的Advices和Advisors

 那我们继续观察它的父类(AbstractAutoProxyCreator),该父类是我们频繁接触到的抽象类。相比它的子类,该类出现了许许多多的方法。并且它显示的实现了前面各种类型的BeanPostProcess的方法。

AbstractAutoProxyCreator:

  public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware 

该类是一个抽象类

  该类继承了ProxyProcessorSupport类(SpringAOP的基础工具类)

  实现了SmartInstantiationAwareBeanPostProcessor接口,使之可以介入到SpringIOC容器的Bean的实例化以及初始化的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kerry_x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值