springboot是如何实现自动装配的

Spring Boot的自动配置核心在于@SpringBootApplication@EnableAutoConfiguration这两个注解。下面是对这两个注解及其工作原理的深入解析:

@SpringBootApplication

@SpringBootApplication:是Spring Boot应用的核心注解,它是一个组合注解,包含了以下三个注解:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan
@SpringBootConfiguration

这个注解继承自@Configuration,这个注解继承自@Configuration,标志着该类是一个配置类,可以包含用于配置应用程序上下文的@Bean方法。它等同于标准的Spring@Configuration注解,但为了语义上的清晰,在Spring Boot中专门使用它来标识主配置类。

@EnableAutoConfiguration

这是自动配置的关键所在,它告诉Spring Boot根据项目中的依赖和一些其他条件自动配置应用。它主要通过以下步骤实现自动配置:

        

 @Import(AutoConfigurationImportSelector.class)

这是@EnableAutoConfiguration中最关键的一部分,它通过导入AutoConfigurationImportSelector类来实现自动配置类的导入逻辑。AutoConfigurationImportSelector是一个实现了DeferredImportSelector接口的类,其主要职责是在应用上下文启动时,动态解析并选择需要导入的自动配置类。

  1. SpringFactoriesLoader: 当@EnableAutoConfiguration被激活时,Spring Boot会利用SpringFactoriesLoader类来加载所有可用的自动配置类。SpringFactoriesLoader通过扫描类路径下的META-INF/spring.factories文件来实现这一点。这个文件是由Spring Boot的自动配置模块提供的,例如spring-boot-autoconfigure jar包中就有这样的文件。

  2. 条件化配置:每个自动配置类通常包含一系列条件注解,例如:

    1. @ConditionalOnClass只有当特定类存在时才进行配置。
    2. @ConditionalOnMissingBean如果容器中不存在某个类型的bean,则进行配置。
    3. @ConditionalOnProperty根据配置文件中的属性值决定是否应用配置。 这些条件确保了配置的灵活性和适应性,仅在满足特定条件时才生效。
  3. Bean注册与初始化: 自动配置类中通过@Bean注解定义的bean,会在条件满足的情况下被注册到Spring容器中。这些bean可以是数据源配置、模板引擎配置、安全配置等各种基础设施服务。

  4. 自动配置类的执行顺序: Spring Boot自动配置类的执行遵循一定的顺序,通常是按类名排序,这可以通过Ordered接口或者@Order注解来调整。此外,spring-boot-autoconfigure模块中还定义了一些特殊的排序规则来处理特殊情况。

  5. 覆盖与排除: 开发者可以通过@SpringBootApplication的属性,如excludeexcludeName,来排除不需要的自动配置类。此外,还可以通过特定的配置属性来覆盖自动配置的默认行为。

@ComponentScan

默认情况下,@SpringBootApplication会自动扫描与启动类同级包及其子包下的所有组件,包括使用@Component@Service@Repository@Controller等注解的类。这使得Spring能够自动发现和注册这些bean,实现了组件的自动管理。

实现自动配置的过程总结

  1. 启动阶段:应用启动时,Spring Boot会找到标记了@SpringBootApplication的类作为启动入口。

  2. 配置加载:通过@SpringBootConfiguration,启动类被识别为配置类,Spring开始处理Java配置。

  3. 组件扫描@ComponentScan执行,扫描并注册应用中的组件。

  4. 自动配置@EnableAutoConfiguration发挥作用,加载spring.factories文件中列出的所有自动配置类。这些配置类基于项目依赖、环境变量和其他条件来决定哪些bean需要被创建。

  5. 条件判断与Bean注册:自动配置类中的条件注解判断是否应该执行配置逻辑,符合条件则通过@Bean方法向Spring容器注册bean。

  6. 依赖注入与应用启动:所有配置完成后,Spring容器管理的所有bean之间通过依赖注入建立起关系,应用准备就绪,开始运行。

总结

整个自动配置过程是一个高度动态且智能的配置加载机制,它依据应用的实际情况(如依赖的jar包、配置文件的设定、类路径下的资源等)来决定如何配置Spring容器。这种机制大大简化了Spring应用的初始配置工作,同时也保持了高度的可定制性,使得开发者能快速构建和运行应用,同时在需要时轻松调整配置。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值