缓存切面自动装配是怎么加进去的
是通过spi的方式把自动配置类加进来,比如AOP是在
E:\spring-boot-2.2.2.RELEASE\spring-boot-project\spring-boot-autoconfigure\target\spring-boot-autoconfigure-2.2.2.RELEASE.jar!\META-INF\spring.factories
文件里面org.springframework.boot.autoconfigure.aop.AopAutoConfiguration
AopAutoConfiguration里面
1————————————————
1. @ConditionalOnProperty加载配置文件spring.aop开头的配置(读取yml配置文件里面spring.aop.auto = true 的配置,如果配置了这个,说明要用到AOP的自动配置功能,当然这个默认值是true,你不需要手动开启,因为框架自动开启了,如果你不需要的话,你可以设置为false)
2. 如果你想给AOP手动弄进来需要添加@EnableAspectJAutoProxy注解,添加了这个注解就代表添加了AOP的功能.注意,这个和上面是不一样的,上个是开启AOP的自动配置,这个是增加AOP的功能.
1————————————————
(一)@EnableAspectJAutoProxy注解添加AOP功能做的事情
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AspectJAutoProxyRegistrar.class)
public @interface EnableAspectJAutoProxy {
首先@Import了org.springframework.context.annotation.AspectJAutoProxyRegistrar 类
org.springframework.context.annotation.AspectJAutoProxyRegistrar给AOP的入口类加入到了Spring容器里面(ConfigurationClassPostProcessor加入的???有待考证),
(二)AopAutoConfiguration类
这个类里面有个内部类
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(Advice.class)
static class AspectJAutoProxyingConfiguration {
@Configuration(proxyBeanMethods = false)
@EnableAspectJAutoProxy(proxyTargetClass = false)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false",
matchIfMissing = false)
static class JdkDynamicAutoProxyConfiguration {
}
@Configuration(proxyBeanMethods = false)
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true",
matchIfMissing = true)
static class CglibAutoProxyConfiguration {
}
}
@EnableAspectJAutoProxy 主要看这个注解,是加入AOP功能的注解,看到源码.默认是采用CGLib的动态代理的,如果你想用JDK的动态代理.就在yml配置spring.aop.proxy-target-class = false .