代码之家  ›  专栏  ›  技术社区  ›  e2rabi

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

  •  88
  • e2rabi  · 技术社区  · 8 年前

    两者之间的区别是什么 @ComponentScan @EnableAutoConfiguration Spring Boot中的注释?有必要添加这些吗?我的应用程序在没有这些注释的情况下工作得很好。我只是想理解为什么我们必须添加它们。

    3 回复  |  直到 8 年前
        1
  •  106
  •   Stephane    6 年前

    @ComponentScan和 @在Spring Boot中启用自动配置注释?

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

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

    有必要添加这些吗?

    如果您需要Spring引导来自动配置您的每件事 @启用自动配置 是必需的。您不需要手动添加它,spring将根据您提供的注释在内部为您添加它。

    实际上 @SpringBootApplication 注释等同于使用 @Configuration , @启用自动配置 @组件扫描 具有默认属性。

    另请参见:

        2
  •  23
  •   ShayneR    7 年前

    Spring Boot的主要优点之一是它的注释驱动配置与传统的基于xml的配置相比, @启用自动配置 基于包含的jar文件自动配置Spring应用程序,并基于pom.xml中的依赖项设置默认值或助手。 自动配置通常基于类路径和定义的bean应用。因此,我们不需要定义任何DataSource、EntityManagerFactory、TransactionManager等,并且基于类路径,Spring Boot会自动创建适当的bean并为我们注册它们。例如,当嵌入了tomcat时。jar的类路径上,您可能需要一个TomcatEmbeddedServletContainerFactory(除非您已经定义了自己的EmbedddServletContinerFactory bean)@EnableAutoConfiguration有一个exclude属性来显式禁用自动配置,否则我们可以简单地从pom中排除它。例如,如果我们不希望Spring配置tomcat,那么从springbootstarterweb中排除springbbootstartertomcat。

    @组件扫描 提供了spring组件扫描的范围,它只是简单地 提供的基本包 并获取@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();
      }
    
    }
    
        3
  •  7
  •   Hetal Rachh    5 年前

    @EnableAutoConfiguration in-spring-boot根据您在classpath中添加的jar告诉您如何配置spring。 例如,如果您添加 spring-boot-starter-web 依赖,它会自动配置Tomcat和Spring MVC。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    您可以使用 @启用自动配置 注释以及 @Configuration 注释。 它有两个可选元件,

    • exclude:如果要排除类的自动配置。
    • excludeName:如果要使用类的完全限定名排除类的自动配置。

    示例:

    @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 是的更新版本 @启用自动配置 这在Spring Boot 1.2中引入。

    @SpringBoot应用程序 是三个注释的组合,

    • @配置 -用于基于java的配置类。

    • @ComponentScan -要启用组件扫描,所有包和 将自动扫描根包下的子包 应用了@SpringBootApplication。

    • @启用自动配置 -启用自动配置
      类基于类路径中添加的jar。

    @组件扫描 启用组件扫描,以便自动创建web控制器类和其他组件 在spring的应用程序上下文中发现并注册为bean。 您可以指定将被扫描以自动发现和注册bean的基本包。

    可选元件之一是,

    • basePackages-可用于声明要扫描的特定包。

    实例

    @ComponentScan(basePackages = {"com.example.test"})
    @Configuration
    public class SpringConfiguration { }