Spring之AOP小结(三)源码解析
Spring之AOP小结(三)源码解析
@EnableAspectJAutoProxy
在Sping框架中,一般情况下都是使用@EnableAspectJAutoProxy开启AOP
源码解析
@EnableAspectJAutoProxy注解
进入@EnableAspectJAutoProxy注解
参数解析:
-
boolean proxyTargetClass() default false;
控制aop的具体实现方式,为true 的话使用cglib,为false的话使用java的Proxy,默认为false
指示是否创建基于子类(CGLIB)的代理,而不是标准的基于Java接口的代理 -
boolean exposeProxy() default false;
控制代理的暴露方式,解决内部调用不能使用代理的场景,默认为false.
EnableAspectJAutoProxy解析:
核心注解是@Import(AspectJAutoProxyRegistrar.class)
进入注解@Import(AspectJAutoProxyRegistrar.class)中的AspectJAutoProxyRegistrar类中,其核心的地方是AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry), 一个AOP的工具类,这个工具类的主要作用是把AnnotationAwareAspectJAutoProxyCreator这个类定义为BeanDefinition放到spring容器中,这是通过实现ImportBeanDefinitionRegistrar接口来装载的。
AnnotationAwareAspectJAutoProxyCreator关系图: