bean的扫描和注册

  1. @ComponentScan注解触发组件扫描
    @SpringBootApplication 是一个组合注解,它包含了 @ComponentScan 注解,该注解会触发 Spring Boot 对指定包及其子包下的组件进行扫描,并将带有特定注解(如 @Component、@Configuration @Service、@Repository、@Controller 等)的类注册为 Bean。
    ComponentScanAnnotationParser 类负责解析 @ComponentScan 注解的属性,确定扫描的基础包、过滤规则等。它会根据注解中的 basePackages 或 basePackageClasses 属性来确定扫描的范围
    ClassPathBeanDefinitionScanner 类根据 ComponentScanAnnotationParser 解析的结果,扫描类路径下的类,查找带有 @Component 及其派生注解的类,并将其注册为 Bean 定义。

  2. 自动配置类注册 @AutoConfiguration
    例如,DataSourceAutoConfiguration 类会根据类路径下是否存在相关的数据库驱动,自动配置数据源
    自动配置机制核心由 EnableAutoConfiguration 注解触发,它通常包含在 @SpringBootApplication 注解中

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
    // 其他属性和方法
}

@Import 会引入 AutoConfigurationImportSelector 类,该类负责加载自动配置类。
selectImports 方法会从 META - INF/spring.factories 文件中读取所有自动配置类,并根据条件进行筛选

  1. @Import 注解导入 Bean 定义
    @Import 注解最常见的使用场景是在带有 @Configuration @AutoConfiguration注解的配置类上,通过它可以将多个配置类组合在一起,方便管理和维护。从技术上来说,@Import 注解可以放在任何 Spring 组件类上
    解析主要由 ConfigurationClassParser 类完成。在 Spring 容器启动过程中,ConfigurationClassPostProcessor 会调用 ConfigurationClassParser 来解析配置类(processImports),处理 @Import 注解

  2. @Bean 注解手动注册 Bean
    在配置类中使用 @Bean 注解可以手动注册 Bean。
    @Bean 注解方法的解析同样由 ConfigurationClassParser 类retrieveBeanMethodMetadata处理。在解析配置类时,会识别 @Bean 注解的方法,并将其封装为 BeanMethod 对象

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容