spring Sping Boot 中的@ EnableAutoConfiguration和@ EnableScan有什么区别?

nkcskrwz  于 5个月前  发布在  Spring
关注(0)|答案(4)|浏览(49)

Sping Boot 中的@ComponentScan@EnableAutoConfiguration注解有什么区别?有必要添加这些吗?我的应用程序在没有这些注解的情况下运行得很好。我只是想了解为什么我们必须添加它们。

xzv2uavs

xzv2uavs1#

Sping Boot 中的@ComponentScan注解和@EnableAutoConfiguration注解之间有何区别?
@EnableAutoConfiguration注解会让Sping Boot 根据您新增的jar相依性,“猜测”您要如何设定Spring。例如,如果HSQLDB位于类别路径上,而您尚未手动设定任何数据库联机Bean,则Spring会自动设定内存中的数据库。
@ComponentScan指示Spring在指定的包中查找其他组件、配置和服务。Spring能够自动扫描、检测和注册预定义项目包中的Bean或组件。如果未指定包,则将当前类包作为根包。
有必要加这些吗?
如果你需要Sping Boot 来自动配置你的每一件事,那么你就需要@EnableAutoConfiguration。你不需要手动添加它,Spring会根据你提供的注解在内部为你添加它。
实际上,@SpringBootApplication注解等效于使用@Configuration@EnableAutoConfiguration@ComponentScan及其默认属性。

另请参阅:

alen0pnh

alen0pnh2#

Sping Boot 的主要优点之一是它的annotation driven,而不是传统的基于xml的配置,@EnableAutoConfiguration基于其包含的jar文件自动配置Spring应用程序,它基于pom.xml中的依赖关系设置默认值或帮助器。自动配置通常基于classpath和定义的bean应用。因此,我们不需要定义任何DataSource,DataManagerFactory,transactionManager等,并神奇地基于类路径,Sping Boot 会自动创建适当的bean并为我们注册它们。例如,当您的classpath上有一个tomcat-embedded.jar时,您可能需要一个TomcatEmbeddedServletContainerFactory。(除非您定义了自己的EmbeddedServletContainerFactory bean)。@EnableAutoConfiguration有一个exclude属性来禁用自动配置显式否则我们可以简单地从pom.xml中排除它,例如,如果我们不希望Spring配置tomcat,则从spring-boot-starter-web中排除spring-bootstarter-tomcat。

@ BifentScan为spring组件扫描提供了作用域,它只是遍历 * 提供的基本包 * 并拾取@Bean或@Autowired等所需的依赖项,在典型的Spring应用程序中,@ BifentScan用于配置类,用@Configuration注解的类。Configuration类包含用@Bean注解的方法。这些@ Bean annotated方法生成由Spring容器管理的beans。这些beans将由@ WebentScan annotation自动检测。有一些annotation可以使beans自动检测,如@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();
  }

}

字符串

lsmd5eda

lsmd5eda3#

spring Boot 中的**@EnableAutoConfiguration**会根据您在类别路径中新增的jar,告知您要如何设定spring。例如,如果您在类别路径中新增spring-boot-starter-web相依性,它会自动设定Tomcat和Spring MVC。

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

字符串
可以将@EnableAutoConfiguration注解与@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是在Sping Boot 1.2中引入的@EnableAutoConfiguration的较新版本。
@SpringBootApplication是三个注解的组合,

  • @Configuration-用于基于java的配置类。
  • @ComponentScan-要启用组件扫描,将自动扫描应用了@SpringBootApplication的根包下的所有包和子包。
  • @EnableAutoConfiguration-启用

类基于类路径中添加的jar。

**@ComponentScan**启用组件扫描,以便在Spring的应用程序上下文中自动发现Web控制器类和您创建的其他组件并将其注册为Bean。您可以指定为自动发现和注册Bean而扫描的基础包。

其中一个可选元素是,

  • basePackages -可用于指定要扫描的特定软件包。

示例,

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

flvtvl50

flvtvl504#

只要确保@SpringBootApplication工作得最好,如果你把someNameAppication类放在项目文件夹之外,比如控制器,服务,模型等。它会扫描整个目录。请确保巧妙地打包它。

相关问题