子包下的所有类)

发布时间:2025-06-24 17:22:02  作者:北方职教升学中心  阅读量:550


  • 基于条件判断是否启用自动配置:

    • 如果某个自动配置类的条件(通过 @Conditional注解指定)满足,Spring Boot 会将该类中的 Beans 加载到上下文中。

      三、

      org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.example.MyApplicationAutoConfiguration

    • 打包并部署: 当你将这个自动配置模块打包为 JAR 并部署时,Spring Boot 会自动根据你的配置类进行自动配置,而无需你手动指定。

    总结

    AutoConfiguration.imports是 Spring Boot 中用来支持模块化自动配置的机制,

    它使得开发者可以通过导入其他配置类来扩展自动配置的功能,避免代码冗余,提升代码的可维护性。子包下的所有类)。

    3. @Conditional 注解与条件化配置

    Spring Boot 自动装配是条件化的,意味着某些配置只会在特定条件下启用。但有时,你可能需要在自动配置过程中引入其他配置或组件,AutoConfiguration.imports提供了这种方式。

    通过这两个注解就可以达到目的,

    @AutoConfiguration
    @Import(MyAutoConfiguration.class)

    只是为了确保万无一失,再写文件org.springframework.boot.autoconfigure.AutoConfiguration.imports

    ---

    注意:从spring boot2.7开始,慢慢不支持META-INF/spring.factories文件了

    需要导入的自动配置类可以放在

    org.springframework.boot.autoconfigure.AutoConfiguration.imports

    ------------------------

    Spring Boot 自动装配(Auto-Configuration)是 Spring Boot 核心特性之一,它大大简化了配置过程,并让 Spring 应用能够根据环境条件自动配置合适的 beans。通过 @Import(CacheAutoConfiguration.class),你将 CacheAutoConfiguration引入到 MyApplicationAutoConfiguration中,从而使得 CacheAutoConfiguration的配置被自动应用。@Compont等注解标注的类spring boot会自动为他们创建bean。(@ComponentScan默认只扫描同包、Spring Boot 会在 JAR 包的 META-INF/spring.factories路径下查找所有的自动配置类,并根据条件进行自动配置。反射、同时被注解编注的类创建bean有一个前提,只对启动类所在的basepackage下的所有带有@Component等注解的类才会创建bean。都是用来加载自动装配的类。通过这个文件,Spring Boot 了解所有可以自动配置的类。

    spring.factories文件包含了所有需要自动配置的类的定义:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.example.MyAutoConfiguration,\org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration

    Spring Boot 启动时,会加载 spring.factories文件中的配置,从而自动引入相应的配置类进行自动装配。

  • 使用 @Conditional注解,控制这些 Bean 何时被加载。Spring Boot 自动装配的原理在于通过 条件注解

  • AutoConfiguration.imports的优势

    • 模块化配置:可以将复杂的自动配置拆分成多个配置类,这样维护起来更容易,也可以减少配置类的依赖性。resource下的文件
      • org.springframework.boot.autoconfigure.AutoConfiguration.imports

      • spring.factories

      • messages_zh_CN.properties

      二、spring.factories文件以及 @Conditional注解等技术。

    缺点:
    • 隐式配置:由于自动装配的背后有大量的隐式配置,开发者可能不知道具体发生了什么,这可能导致问题排查的困难。org.springframework.boot.autoconfigure.AutoConfiguration.imports

      org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件功能与 spring.factories一样。

      org.springframework.boot.autoconfigure.AutoConfiguration.imports

      org.springframework.boot.autoconfigure.AutoConfiguration.imports

      一、这个注解会触发 Spring Boot 内部的一些机制,自动引入和配置必要的 Beans。

    • 灵活的条件化装配:通过 @Conditional系列注解,可以根据特定的条件加载或禁用某些配置,提供了极大的灵活性。
    • @ConditionalOnResource: 只有在类路径下存在某个资源时,才会装配该 Bean。通常,开发者会通过以下方式进行自定义自动配置:

      1. 创建一个 @Configuration类,定义需要的 Bean。spring.factories文件

        我们知道在spring boot项目中,只要用注解@Configuration、类路径、@Conditional是 Spring 5 中引入的一个注解,支持多个条件判断,可以基于环境变量、

    自定义自动装配

    除了使用 Spring Boot 提供的自动装配功能外,你还可以创建自己的自动配置类。

    步骤:
    • 定义模块自动配置类(CacheAutoConfiguration)

      @Configuration@AutoConfigurationpublic class CacheAutoConfiguration {    @Bean    public CacheManager cacheManager() {        return new ConcurrentMapCacheManager("myCache");    }}
    • 主自动配置类使用 @AutoConfiguration.imports导入其他配置类

      import org.springframework.boot.autoconfigure.AutoConfiguration;import org.springframework.boot.autoconfigure.AutoConfigurationPackage;import org.springframework.context.annotation.Import;@AutoConfiguration@Import(CacheAutoConfiguration.class)public class MyApplicationAutoConfiguration {    // 这里可以继续配置其他自动配置或bean定义}

    在上面的例子中,CacheAutoConfiguration类为缓存配置提供了自动配置。

    在 Spring Boot 启动类上,通常会看到如下代码:

    @SpringBootApplication  // @SpringBootApplication 包含了 @EnableAutoConfigurationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

    @SpringBootApplication注解是一个复合注解,包含了:

    • @EnableAutoConfiguration:启用自动装配
    • @ComponentScan:启动组件扫描
    • @Configuration:声明配置类

    @EnableAutoConfiguration的作用是告诉 Spring Boot,根据类路径中存在的依赖,自动配置应用所需要的各种 Bean。

  • 加载并执行自动配置类:

    • Spring Boot 根据 spring.factories中的配置,加载所有的自动配置类。
    • 可扩展性:通过 AutoConfiguration.imports,可以轻松地将多个配置类组合在一起,形成一个完整的自动配置。spring boot 默认的包扫描范围。

      Spring Boot 主要通过以下几个常用的条件注解来控制自动装配:

      • @ConditionalOnClass: 当指定的类存在时,启用自动配置。
      • @ConditionalOnExpression: 基于 SpEL 表达式的条件判断。
      • 简化配置:当多个自动配置类需要引用其他配置时,通过 AutoConfiguration.imports可以避免每次都显式地导入配置类,提升代码的简洁性和可维护性。
      • spring.factories文件中注册自定义自动配置类。自动装配通过条件化的配置机制,使得开发者无需手动配置各类组件,极大简化了应用的开发流程,但也需要开发者对自动装配机制有一定了解,以便在遇到问题时能够做出合适的调优和修改。

        这意味着,开发者可以通过在自动配置类中使用 AutoConfiguration.imports,来让 Spring Boot 自动加载额外的配置类,而无需显式地在 @Configuration注解中导入这些类。比如,如果 spring-boot-starter-web依赖存在,Spring Boot 会自动配置 DispatcherServlet

        注意:从spring boot2.7开始,慢慢不支持META-INF/spring.factories文件了

        需要导入的自动配置类可以放在

        org.springframework.boot.autoconfigure.AutoConfiguration.imports

        org.springframework.boot.autoconfigure.AutoConfiguration.imports

        是 Spring Boot 的一种自动配置机制,它允许你在 Spring Boot 的自动配置类中通过 @Import注解动态地导入其他类。

  • @ConditionalOnMissingBean: 只有在某个 Bean 不存在时,才会装配该 Bean。操作系统等条件,决定是否加载某个配置类。@Bean、
  • 合并配置:

    • 如果多个自动配置类同时定义了相同的 Bean,Spring Boot 会选择一个配置类来进行加载。
    • 开发者也可以通过 @Primary注解或 @Qualifier注解来明确指定 Bean。反射
    • 控制性较差:自动配置的行为是由 Spring Boot 的自动配置类来决定的,如果不清楚自动配置的细节,可能导致配置不符合预期。
    • @ConditionalOnBean: 只有在某个 Bean 已经存在时,才会装配该 Bean。

      背景与使用场景

      Spring Boot 的自动配置(@Configuration@EnableAutoConfiguration)会根据项目的类路径(class path)和项目中存在的 bean 来自动配置 Spring 应用。

    • 例如,自定义一个简单的自动配置类:

      @Configuration@ConditionalOnClass(DataSource.class) // 如果 DataSource 存在,则加载此配置public class MyDataSourceAutoConfiguration {    @Bean    public DataSource dataSource() {        return new HikariDataSource();    }}

      总结

      Spring Boot 自动装配的核心原理基于 @EnableAutoConfiguration注解,结合了条件化配置、它通常与 @AutoConfiguration@EnableAutoConfiguration配合使用,适用于希望在 Spring Boot 应用中提供自定义自动配置的场景。

      2. spring.factories 文件

      自动装配的具体实现由 spring.factories文件来定义。

      具体来说,AutoConfiguration.imports是一种手段,用于为 Spring Boot 的自动配置类提供额外的配置信息,或者使得某些类被自动引入,从而简化 Spring Boot 应用的配置过程。

    • 减少配置文件:自动装配减少了 application.propertiesapplication.yml配置文件的复杂度。

      如何在 Spring Boot 中使用

      1. 创建一个自动配置类(例如 MyAutoConfiguration

        import org.springframework.boot.autoconfigure.AutoConfiguration;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@AutoConfigurationpublic class MyAutoConfiguration {    @Bean    public MyService myService() {        return new MyService();    }}
      2. 在主自动配置类中导入该配置类

        import org.springframework.boot.autoconfigure.AutoConfiguration;import org.springframework.boot.autoconfigure.AutoConfigurationPackage;import org.springframework.context.annotation.Import;@AutoConfiguration@Import(MyAutoConfiguration.class)public class MyApplicationAutoConfiguration {    // 可以继续添加其他的配置}
      3. 让 Spring Boot 加载自动配置: 在 META-INF/spring.factories文件中添加如下内容,确保 Spring Boot 会加载你的自动配置类。

      4. @ConditionalOnProperty: 根据配置文件中的属性值来决定是否装配该 Bean。

      基本用法

      1. 使用 @AutoConfiguration配合 @Import导入配置类

        • 创建一个新的自动配置类 AutoConfiguration,然后通过 AutoConfiguration.imports注解导入其他配置类。

          问题来了,如果是加入maven坐标依赖的jar包,就是项目根目录以外的Bean是怎么添加的??如果你了解过spring boot自动装配的原理,那么你可以很容易知道,在项目根目录以外的Bean,也就是导入的spring-boot-starter-***的maven依赖 是根据 /META-INF/spring.factories下的文件去进行加载的。

      2. 示例:创建自动配置类并导入其他配置类

      假设你有一个应用需要启用某个功能模块(例如缓存配置模块),你可以通过以下方式使用 @AutoConfiguration.imports来导入。@Configuration类以及 spring.factories文件等多个机制来实现的。

    • 为第三方库或框架提供自动配置:第三方库或框架可以通过该机制引入一些默认的配置类,而无需开发者手动配置。
    • @ConditionalOnMissingClass: 当指定的类不存在时,启用自动配置。WebMvcConfigurer等 Web 组件。
    • @EnableAutoConfiguration注解的帮助下,Spring Boot 会从 spring.factories文件中读取所有的自动配置类。自动装配过程主要通过以下步骤实现:

      1. @EnableAutoConfiguration
      2. spring.factories 文件
      3. @Conditional注解与条件化配置
      4. 自动装配的工作机制
      1. @EnableAutoConfiguration 注解

      @EnableAutoConfiguration注解是 Spring Boot 自动装配的核心注解,作用是启用 Spring Boot 的自动配置功能。

    这些条件注解可以灵活地控制自动装配类的加载与装配。

  • 过度配置:在某些情况下,Spring Boot 会自动装配一些组件,即使你不需要这些组件,可能会增加不必要的依赖和类加载。Tomcat

    Spring Boot 自动装配的原理

    Spring Boot 自动装配的核心原理是通过 条件化配置,在特定的条件下自动配置 Spring Beans,而这些条件主要由 @EnableAutoConfiguration注解控制。这些条件是通过 @Conditional注解来控制的。这种机制通常用于为 Spring Boot 应用程序自动装配额外的配置或依赖。

  • 自动配置类通常是通过 @Configuration注解定义的,Spring Boot 会检查自动配置类中是否包含需要条件判断的配置(如 @Conditional注解)。

    使用场景举例

    1. 模块化的自动配置:在大型应用中,Spring Boot 的自动配置类可以通过 AutoConfiguration.imports来进一步拆分和引入其他配置类。

    Spring Boot 自动装配的优缺点

    优点:
    • 开箱即用:Spring Boot 自动装配使得开发者无需显式地进行繁琐的配置,Spring Boot 会根据现有的类路径和项目依赖自动配置所需的组件和 Bean。

      4. 自动装配的工作机制

      Spring Boot 自动装配的执行流程可以分为以下几个步骤:

      1. 启动时扫描 @EnableAutoConfiguration注解:

        • Spring Boot 会扫描 @EnableAutoConfiguration注解,从而触发自动装配的过程。