什么是自动配置?SpringBoot如何实现自动配置?
Spring Boot的自动配置是一种强大的机制,它可以根据你的项目的jar依赖来自动配置Spring应用。自动配置试图根据添加在classpath上的类来做出最合理的判断,并自动进行配置。例如,如果你的classpath下存在H2数据库的类,那么Spring Boot会自动配置一个内存数据库。如果你的classpath下存在spring-webmvc
,那么Spring Boot会假设你正在开发一个web应用,并会相应地设置DispatcherServlet。
Spring Boot的自动配置是通过@EnableAutoConfiguration
注解实现的。这个注解告诉Spring Boot根据类路径中的jar依赖为Spring应用添加配置。这个注解通常放在主类上,而且它是@SpringBootApplication
注解的一部分。
Spring Boot的自动配置是通过查看spring.factories
文件来实现的。在Spring Boot的jar依赖中,例如spring-boot-autoconfigure
,在其资源文件夹中有一个META-INF
文件夹,这个文件夹下有一个spring.factories
文件,这个文件就是Spring Boot自动配置的核心。
在spring.factories
文件中,有一行是org.springframework.boot.autoconfigure.EnableAutoConfiguration
,这行下面列出了所有的自动配置类,如DataSourceAutoConfiguration
,MongoAutoConfiguration
等等。当Spring Boot启动的时候,会加载这些自动配置类。
每一个自动配置类都是一个配置类(即带有@Configuration
注解的类),并且大多数自动配置类都是有条件的(即带有@Conditional
注解的类)。这个注解可以使配置在满足某种条件时才会生效,例如,当某个特定的类存在于classpath上或者某个Bean不存在的时候。
因此,通过这种方式,Spring Boot可以根据classpath上的类和已经存在的Bean,来自动配置Spring应用。这大大简化了Spring应用的配置过程,也就是Spring Boot的”约定优于配置”的核心理念。