如何在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
公众号丨代码星辰阁