Bootstrap

​​​​​​​自动配置 | 手动配置 |Spring Boot

如何在Spring Boot项目中实现自动配置?

自动配置的实现原理是什么?

如何在Spring Boot项目中手动配置自动配置类?

PART 01

如何在Spring Boot项目中实现自动配置?

依赖管理

引入相关的起步依赖,这些依赖通常包含了自动配置所需的组件和配置信息。

注解启用

项目主类上添加 @SpringBootApplication 注解,它组合了多个注解,如 @EnableAutoConfiguration 等,开启自动配置功能。

配置类

Spring Boot 内部有大量的配置类,根据不同的依赖情况进行条件化的配置。这些配置类会在合适的条件下被加载并生效。

属性配置

可以在配置文件(如 application.properties 或 application.yml)中设置一些属性来影响自动配置的行为。

组件扫描

确保相关的组件能被自动扫描并纳入 Spring 容器管理。

环境感知

Spring Boot 会根据当前运行环境(如开发、生产等)进行相应的自动配置调整。

PART 02

自动配置的实现原理是什么?

01

注解驱动

    通过使用特定的注解,如@SpringBootApplication、@EableAutoConfiguration等,来启用自动配置功能。

02

条件注解

        自动配置类通常使用条件注解,如@ConditionalOnClass、@ConditionalOnBean、@ConditionalOnProperty等,根据特定条件决定是否自动配置某个Bean或功能。

03

配置文件

   SpringBoot会加载META-INF/spring.factories配置文件中定义的自动配置类,这些自动配置类会被Spring Boot自动识别并应用。

04

组件扫描

       Spring Boot会自动扫描项目中的依赖和配置,根据条件判断自动配置一系列常用的Bean,使得开发者无需手动配置即可快速搭建和部署应用程序。

05

SpringFactoriesLoader

      SpringFactoriesLoader类实现了检索META-INF/spring.factories文件,并获取指定接口的配置的功能。它会遍历整个ClassLoader中所有jar包下的spring.factories文件,获取自动配置类的信息。

PART 03

如何在Spring Boot项目中手动配置自动配置类?

1.编写一个与配置类,这个配置类使用@ConfigurationProperties注解与全局配置文件中的以myconfig开头的一组配置文件绑定。

@Data
@Slf4j
@ConfigurationProperties(prefix = "myconfig")
public class ServiceProperties {    
private String name;    
public void print(){        
log.info("自动配置成功。。。" + name);    
  }
}

      2、编写一个自动配置加载类,这个类将使用@EnableConfigurationProperties注解将配置类加载到spring的ioc容器中

@Configuration
@EnableConfigurationProperties(ServiceProperties.class)
public class SeviceAutoConfiguration {
}

3、将编写的自动配置类添加到resources/META-INF/spring.factories中EnableAutoConfiguration的值中。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.ilan.autoconfig.config.SeviceAutoConfiguration

4、application.properties配置文件配置一个对应属性。

server.port=8080
myconfig.name=pengyulong

5、编写一个测试类,测试属性是否生效。

@RestController
public class ControllerDemo {
    @Resource
    private ServiceProperties serviceProperties;
    @RequestMapping("test")
    public void test(){
        serviceProperties.print();
    }
}   

                                                        

日志:2022-02-21 22:15:36.419  INFO 63382 --- [nio-8081-exec-1] c.i.a.service.ServiceProperties          : 自动配置成功。。。pengyulong

公众号丨代码星辰阁

;