0


springboot-自动配置

一、自动配置的原理
Spring Boot 的自动配置基于以下几个核心概念:

条件注解 (Conditional Annotations):@Conditional 系列注解用于根据特定条件判断是否加载某个配置类或 Bean。
**自动配置类 (Auto-configuration Classes)**:这些类通过 META-INF/spring.factories 文件被自动加载。
**配置属性 (Configuration Properties)**:通过外部化配置来控制自动配置的行为。

二、自动配置的实现机制
Spring Boot 通过以下步骤实现自动配置:

启用自动配置:在主类上添加 @SpringBootApplication 注解,该注解包含 @EnableAutoConfiguration,开启自动配置功能。
加载自动配置类:Spring Boot 在启动时会扫描 META-INF/spring.factories 文件,找到所有自动配置类。
条件注解的评估:根据条件注解(如 @ConditionalOnClass、@ConditionalOnMissingBean 等),决定是否加载对应的配置类或 Bean。

三、自动配置示例
接下来,我们通过具体的代码示例来展示 Spring Boot 自动配置的工作原理。

1. 创建 Spring Boot 项目
首先,创建一个简单的 Spring Boot 项目。在 pom.xml 文件中添加必要的依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency></dependencies>

2. 主类和基本配置
创建一个主类,并添加 @SpringBootApplication 注解:

importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassDemoApplication{publicstaticvoidmain(String[] args){SpringApplication.run(DemoApplication.class, args);}}

3. 自动配置类示例
为了展示自动配置的原理,我们自定义一个自动配置类。假设我们要自动配置一个自定义服务 MyService。

首先,创建 MyService 类:

publicclassMyService{publicvoidperform(){System.out.println("Performing a task...");}}

然后,创建自动配置类 MyServiceAutoConfiguration:

importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;@ConfigurationpublicclassMyServiceAutoConfiguration{@Bean@ConditionalOnMissingBeanpublicMyServicemyService(){returnnewMyService();}}

在 resources/META-INF/spring.factories 文件中注册自动配置类:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.demo.MyServiceAutoConfiguration

4. 使用自定义自动配置
在 Spring Boot 应用中,我们可以直接注入 MyService 并使用它:

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassMyController{@AutowiredprivateMyService myService;@GetMapping("/perform")publicStringperformTask(){
        myService.perform();return"Task performed!";}}

启动应用程序,访问 http://localhost:8080/perform,可以看到控制台输出 “Performing a task…”。

四、自动配置的深入理解
1. 条件注解
Spring Boot 提供了丰富的条件注解,用于控制配置类或 Bean 的加载:

@ConditionalOnClass:当类路径上存在指定的类时,才会实例化相应的 Bean。
@ConditionalOnMissingBean:当容器中不存在指定的 Bean 时,才会实例化相应的 Bean。
@ConditionalOnProperty:当指定的配置属性存在并符合预期时,才会实例化相应的 Bean。
2. 配置属性
通过外部化配置(如 application.properties 或 application.yml),可以控制自动配置的行为:

my.service.enabled=true

在自动配置类中,可以使用 @ConditionalOnProperty 注解来实现基于配置属性的条件加载:

@Configuration@ConditionalOnProperty(name ="my.service.enabled", havingValue ="true", matchIfMissing =true)publicclassMyServiceAutoConfiguration{// ...}

五、禁用自动配置
在某些情况下,你可能需要禁用特定的自动配置。可以使用 @SpringBootApplication 注解的 exclude 属性:

@SpringBootApplication(exclude ={DataSourceAutoConfiguration.class})publicclassDemoApplication{// ...}
标签: spring boot java spring

本文转载自: https://blog.csdn.net/qq_44895567/article/details/139599473
版权归原作者 假装得大佬 所有, 如有侵权,请联系我们删除。

“springboot-自动配置”的评论:

还没有评论