@ComponentScan和春靴中的@EnableAutoConfiguration有什么区别?
弹簧靴中的 注释 和 注释有什么区别?是否有必要添加这些内容?我的应用程序在没有这些注释的情况下运行良好。我只想了解为什么我们必须添加它们。@ComponentScan
@EnableAutoConfiguration
弹簧靴中的 注释 和 注释有什么区别?是否有必要添加这些内容?我的应用程序在没有这些注释的情况下运行良好。我只想了解为什么我们必须添加它们。@ComponentScan
@EnableAutoConfiguration
Spring Boot中的@ComponentScan注释和@EnableAutoConfiguration注释有什么区别?
@EnableAutoConfiguration
注释告诉Spring Boot根据您添加的jar依赖项“猜测”您将如何配置Spring。例如,如果 HSQLDB 位于类路径上,并且您尚未手动配置任何数据库连接 Bean,则 Spring 将自动配置内存中数据库。
@ComponentScan
告诉Spring在指定的软件包中寻找其他组件,配置和服务。Spring能够自动扫描,检测和注册预定义项目包中的Bean或组件。如果未指定包,则将当前类包视为根包。
是否有必要添加这些内容?
如果您需要Spring启动来自动为您配置所有内容,@EnableAutoConfiguration
是必需的。您无需手动添加它,spring会根据您提供的注释在内部为您添加它。
实际上,@SpringBootApplication
注释等效于使用@Configuration
、@EnableAutoConfiguration
和@ComponentScan
及其默认属性。
另请参阅:
Spring Boot的主要优点之一是它的注释驱动,而不是传统的基于xml的配置,@EnableAutoConfiguration根据其包含的jar文件自动配置Spring应用程序,它根据pom.xml中的依赖项设置默认值或帮助程序。自动配置通常基于类路径和定义的 Bean 进行应用。因此,我们不需要定义任何DataSource,EntityManagerFactory,TransactionManager等,并且神奇地基于类路径,Spring Boot会自动创建适当的bean并为我们注册它们。例如,当你的类路径上有一个tomcat-embedded.jar你可能需要一个TomcatEmbeddedServletContainerFactory(除非你定义了自己的 EmbeddedServletContainerFactory Bean)。@EnableAutoConfiguration有一个排除属性来显式禁用自动配置,否则我们可以简单地将其从pom.xml中排除,例如,如果我们不希望Spring配置tomcat,那么从spring-boot-starter-web中排除spring-bootstarter-tomcat。
@ComponentScan为弹簧组件扫描提供了范围,但它只需通过提供的基础包,并获取@Bean或@Autowired等所需的依赖关系,在典型的Spring应用程序中,@ComponentScan用于配置类,即标有@Configuration的类。配置类包含用 @Bean 注释的方法。这些@Bean带注释的方法生成由Spring容器管理的bean。这些 bean 将通过@ComponentScan注释自动检测。有一些注释使bean可以自动检测,例如@Repository,@Service,@Controller,@Configuration@Component。在下面的代码中,Spring开始从包括BeanA类在内的包中扫描。
@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();
}
}