在Spring Boot中,@ComponentScan和@EnableAutoConfiguration注解之间有什么区别?是否需要添加这些注解?我的应用程序在没有这些注解的情况下也可以正常工作。我只是想了解为什么我们需要添加它们。
@ComponentScan
和@EnableAutoConfiguration
之间的区别。@EnableAutoConfiguration
注解告诉Spring Boot根据你添加的jar依赖项“猜测”你想要如何配置Spring。例如,如果HSQLDB在你的类路径上,并且你没有手动配置任何数据库连接bean,则Spring将自动配置一个内存数据库。@ComponentScan
则告诉Spring在指定的包中查找其他组件、配置和服务。Spring能够自动扫描、检测和注册你的bean或组件来自预定义的项目包。如果没有指定包名,则当前类包被视为根包。是否需要添加这些注解呢?@EnableAutoConfiguration
。您不需要手动添加它,Spring会根据您提供的注释在内部自动添加它。@SpringBootApplication
注释等同于使用@Configuration
、@EnableAutoConfiguration
和@ComponentScan
及其默认属性。@Configuration
@ComponentScan(basePackageClasses = BeanA.class)
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class Config {
@Bean
public BeanA beanA(){
return new BeanA();
}
@Bean
public BeanB beanB{
return new BeanB();
}
}
@EnableAutoConfiguration
用于告诉Spring如何配置,基于您在类路径中添加的JAR包。
例如,如果您在类路径中添加了spring-boot-starter-web
依赖项,则会自动配置Tomcat和Spring MVC。<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
您可以使用 @EnableAutoConfiguration
注释和 @Configuration
注释一起使用。它有两个可选元素,
示例:
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
@EnableAutoConfiguration(excludeName = {"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication
是 @EnableAutoConfiguration
的新版本,它是在 Spring Boot 1.2 中引入的。
@SpringBootApplication
是三个注解的组合,它们分别是:
@Configuration
- 用于Java配置类。
@ComponentScan
- 启用组件扫描,所有位于根包下(应用了 @SpringBootApplication)的子包都将自动扫描。
@EnableAutoConfiguration
- 基于添加到classpath中的jar包,启用自动配置。
@ComponentScan
启用组件扫描,使Web控制器类和其他组件可以自动被发现并在Spring的应用上下文中注册为Bean。您可以指定要扫描以自动发现和注册Bean的基本包。
其中一个可选元素是:
例如:
@ComponentScan(basePackages = {"com.example.test"})
@Configuration
public class SpringConfiguration { }
@SpringBootApplication
吗?那是你提到的两个的替代品。 - Paul Samsotha@ComponentScan
用于扫描您注释的Spring组件,@EnableAutoConfiguration
启用Spring Boot提供的免费好处(配置、激活组件等)。@SpringBootApplication
允许您使用单个注释而不是通常使用的几个注释,例如您提到的两个。请查看我链接的javadoc。 - Paul Samsotha