spring boot @Enable*
Enable特性:
@Import(Xxxx.class)//关键点,使用Import注解,再回调。Xxxx.class是一个配置类
Xxxx implements ImportSelector
selectImports //把我们传入的类数组进行装配
Xxx implenments ImportBeanDefinitionRegistrar
registerBeanDefinitions
demo参考链接的第三种方式:
https://www.cnblogs.com/lql6/p/11805876.html
1)@EnableAsync开始说起
①新建一个for循环输出,添加@Async允许其异步执行
②输出时,若不添加@EnableAsync则不能够实现异步执行上图的方法。
查看@EnableAsunc注解,内部回调@Import
2)注解装配一个监控器的实现来看Enable特性
①首先自定义一个注解。
②用@Import导入ScannerPackageRegistar类,该类实现了ImportBeanDefinitionRegistrar中的registerBeanDefinitions方法,
先获取自定义注解中的指定扫描的类数组(启动类处写入),BeanDefinitionRegistry实现了动态装配,并且回调MyBeanDefinitionProcessor
ImportBeanDefinitionRegistrar参考链接:https://blog.csdn.net/jiachunchun/article/details/94569246
https://www.jianshu.com/p/2b993ced6a4c
(1)自定义一个注解,扫描类的地址
(2)通过importingClassMetadata.getAnnotationAttributes获取自定义注解packages里面定义的类的数组,存储到attrs中,强转成List集合。
(3)当类要装配到spring容器中去的时候,是需要经过BeanPostProcessor的,所以在这里重写BeanPostProcessor,以达到监控类往spring装配的过程。
(4)启动类