本文是参考各博主文章及语言模型总结加上自认为简洁易理解的语言而写成的,写出此文目的就是希望能通俗易懂的解释一个知识点,我希望我能写的更好一点,有什么不足希望能告诉我。
什么是 @EnableAutoConfiguration
?
@EnableAutoConfiguration
是 Spring Boot 中的一个注解,它可以根据你的项目中包含的依赖,自动配置应用程序所需的各种组件。例如,如果你的项目中有一个数据库依赖,Spring Boot 会自动配置数据库连接。
一句话简单理解:根据你的依赖自动配置所需的组件。
具体例子如下,重点是先理解:
这个注解@SpringBootApplication实际上包含了 @EnableAutoConfiguration,不信ctrl点进去see see:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
maven中添加依赖:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
.properties中添加配置:
spring.datasource.url=jdbc:h2:mem:testdb
spring.h2.console.enabled=true
用这个例子来说,就是打上 @EnableAutoConfiguration注解,
Spring Boot 就会自动配置 H2 数据库。
@EnableAutoConfiguration
和 @Configuration
的区别
@Configuration
- 定义:
@Configuration
注解用于定义一个配置类,这个类可以包含一个或多个@Bean
方法。这些方法会返回一个对象,该对象会被 Spring 容器管理。 - 使用场景:当你需要手动创建和配置 Bean 时,通常会使用
@Configuration
注解。例如,定义数据源、服务等。 -
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyService(myRepository()); } @Bean public MyRepository myRepository() { return new MyRepository(); } }
@EnableAutoConfiguration
定义:@EnableAutoConfiguration
注解用于启用 Spring Boot 的自动配置功能。它会根据项目中引入的依赖和特定条件自动配置 Bean。
使用场景:通常在 Spring Boot 应用的入口类上使用,以便自动配置各种组件,例如数据库连接、消息队列等。它会扫描 META-INF/spring.factories
文件( 版本若是较新,会在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中,换汤不换药,都一样的东西),找出需要自动配置的类。
spring.factories或
AutoConfiguration.imports,里面装的都是第三方依赖的类的全限定名。
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
更具一点的作用就是,包含该@EnableAutoConfiguration 的@SpringBootApplication就可以读取spring.factories/
AutoConfiguration.imports中的类(其中的类都会带有@Configuration),并在启动时自动注入IOC容器。
强调一下:第三方依赖(即starter中的类),非当前模块拥有的;
这个总结挺好: