Spring Boot 中@ComponentScan 和@EnableAutoConfiguration 有什么区别?

新手上路,请多包涵

Spring Boot 中的 @ComponentScan@EnableAutoConfiguration 注释有什么区别?有必要加这些吗?没有这些注释,我的应用程序运行良好。我只是想了解为什么我们必须添加它们。

原文由 e2rabi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 741
2 个回答

Spring Boot 中的@ComponentScan 和@EnableAutoConfiguration 注解有什么区别?

@EnableAutoConfiguration 注释告诉 Spring Boot 根据您添加的 jar 依赖项“猜测”您将如何配置 Spring。例如,如果 HSQLDB 在您的类路径上,并且您没有手动配置任何数据库连接 bean,那么 Spring 将自动配置一个内存数据库。

@ComponentScan 告诉Spring在指定包中寻找其他组件、配置和服务。 Spring 能够从预定义的项目包中自动扫描、检测和注册您的 bean 或组件。如果未指定包,则将当前类包作为根包。

有必要加这些吗?

如果您需要 Spring Boot 为您自动配置所有东西 @EnableAutoConfiguration 是必需的。你不需要手动添加,spring会根据你提供的注解在内部为你添加。

Actually the @SpringBootApplication annotation is equivalent to using @Configuration , @EnableAutoConfiguration and @ComponentScan with their default attributes.

也可以看看:

原文由 Shaheer 发布,翻译遵循 CC BY-SA 4.0 许可协议

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- 中排除 spring-bootstarter-tomcat-网。

@ComponentScan 为 spring 组件扫描提供范围,它简单地遍历 提供的基础包 并获取 @Bean 或 @Autowired 等所需的依赖项,在典型的 Spring 应用程序中,@ComponentScan 用在配置类中,那些用 @ 注释的配置。配置类包含用@Bean 注释的方法。这些带@Bean 注解的方法生成由 Spring 容器管理的 beans。这些 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();
  }

}

原文由 ShayneR 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题