请关注我的微信公众号
个人微信公众号
技术交流群 (仅作技术交流):642646237
请关注我的头条号:
@Enable*注解启动特性。
复习一下ConfigurationProperties注解
运行以下程序:
解析@ConfigurationProperties背后的原理
虽然上面的配置也可以正常运行,但是最终使用的是
@EnableConfigurationProperties注解。
使用spring boot的异步功能——没有异步功能
定义一个任务类:
运行程序:
发现不是异步的。
使用spring boot的异步功能
在需要异步执行的类前面加上@Async:
或在需要异步执行的方法上加上
@Async:
也不需要继承Runnable接口:
在类上加@Async,整个类的所有方法都能异步执行:
@EnableAsync开启异步功能:
spring boot的@Enable*注解的原理
spring boot的@Enable*注解最后使用了@Import注解。
@Import能够代替@Component.
@Import({User.class,Role.class}),User、Role不需要添加Component注解,就能够被spring管理。
同样配置类也不需要添加@Configuration就可以导入。
Import注解配合ImportSelector接口
实现ImportSelector接口:
记住User和Role不需要添加@Component注解:
记住MyConfiguration不需要添加@Configuration注解:
@Import导入ImportSelector的实现类:
Import注解配合ImportBeanDefinitionRegistrar接口使用
实现ImportBeanDefinitionRegistrar接口:
ImportBeanDefinitionRegistrar接口跟ImportSelector接口不一样,需要自己手动注册bean。
自定义注解,Import注解配合ImportBeanDefinitionRegistrar接口
在下面的例子中,不会让ImportBeanDefinitionRegistrar注入任何的bean,因为之前的例子已经演示过了,现在只是演示自定义注解在ImportBeanDefinitionRegistrar中可以获取到自定义注解的信息。
之前一直忽视的
importingClassMetadata参数,现在使用起来了,通过该参数我们可以获取注解的一些信息。我们自定义了一个名为
MyAnnotation的注解:
请注意该注解使用了
@Import注解。
运行上面的程序,我们发现我们已经成功获取了自定义注解的
name属性的值
Import注解配合ImportBeanDefinitionRegistrar接口的例子
下面这个例子没有什么特别的意思,就是整合了Import、ImportBeanDefinitionRegistrar和BeanPostProcessor。
从之前的教程我们知道bean在实例化的过程中会调用BeanPostProcessor的相关方法。
现在我们使用ImportBeanDefinitionRegistrar来注册BeanPostProcessor的实现类。
BeanPostProcessor的实现类有一个属性packages,该属性什么时候被赋值呢?这就借助ImportBeanDefinitionRegistrar。
Import注解是没有packages属性,所以我们需要自定义注解:
现在我们可以使用自定义的注解MyAnnotation:












网友评论