请关注我的微信公众号
个人微信公众号
技术交流群 (仅作技术交流):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
:
网友评论