在学习SpringBoot的时候,我们会使用到@Enable***
注解的地方,使用上也都是加在@Configuration
类注解的类上面。
1何为@Enable模块装配
Spring Framework 3.1 开始支持@Enable 模块驱动
。所谓模块
是指具备相同领域的功能组件集合, 组合所形成一个独立的单元。比如 Web MVC 模块、AspectJ代理模块、Caching(缓存)模块、JMX(Java 管 理扩展)模块、Async(异步处理)模块等。模块装配是spring-boot 另外一种装配方式。实现方式:注解方式,编程方式。
2查看@Enable的源码
查看这些注解的实现,我们发现每一个注解都有一个 @Import
注解。@Import
注解在4.2之前只支持导入配置类,在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean。这也说明了,自动开启的实现,其实是导入了一些配置类。
3@EnableWebMvc采用注解驱动方式
4@EnableCaching采用接口编程方式
首先@EnableCaching需要@Import一个CachingConfigurationSelector类
CachingConfigurationSelector又继承AdviceModeImportSelector
AdviceModeImportSelector又实现了ImportSelector
所以,当我们自定以一个@Enable模块时需要ImportSelector的实现类。
5自定义@Enable模块
5.1基于注解驱动实现
5.2基于接口驱动实现
首先,EnableTestBootstrap启动,之后根据@EnableMyConfig注解,找到MyImportSelector类,找到selectImports方法,进行加载“test”bean
操作。