1. 组件注解定义bean
+ 组件扫描注册bean
@Controller
/@RestController
– 一般用于定义控制器组件bean
@Service
– 一般用于定义业务服务逻辑层组件bean
@Repository
– 一般用于定义数据存储访问组件bean
@Component
– 定义一个一般组件bean@Component
是前三个注解的基础,这里提到的注解都必须结合组件扫描机制使用,组件扫描的注解是@ComponentScan
2. 配置类注解定义bean
@Configuration
+ @Bean
定义bean
@Configuration
– 定义配置类配置类本身也会作为一个bean被注册到容器中
@Bean
– 注解到配置类的方法上定义bean
使用导入注解 @Import
注册bean
导入注解 @Import
可以通过导入另外一个配置类的方式注册bean
,也可以直接将一些普通Java
类注册成一个bean。具体地讲,通过 @Import
,可以使用以下三种方式之一注册bean
:
-
类型一 : 导入某个配置类
@Import(MyConfiguration.class)
导入一个配置类,这里
MyConfiguration
使用了@Configuration
注解,由Spring
专门用于bean
定义;@Import(Bean.class)
将
Bean
作为一个配置类使用,效果同上;
这种方式导入配置类的处理过程是 :
- 将该类本身作为
bean
定义注册, - 扫描该类中
@Bean
注解的方法并将其作为一个bean
定义注册。
-
类型二 : 导入某个
ImportSelector
接口实现类@Import(MyImportSelector.class)
-
类型三 : 导入某个
ImportBeanDefinitionRegistrar
接口实现类@Import(MyBeanDefinitionRegistrar.class)
参考资料
Spring 工具类 ConfigurationClassParser 是如何工作的 ?
Spring 配置类的分类
Spring 概念模型接口 ImportSelector : 配置类导入选择器
Spring 概念模型接口 ImportBeanDefinitionRegistrar: Bean定义导入器