拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Spring Boot中@ComponentScan和@EnableAutoConfiguration之间的区别

Spring Boot中@ComponentScan和@EnableAutoConfiguration之间的区别

白鹭 - 2021-11-24 636 0 0

1.简介

在本快速教程中,我们将了解Spring Framework中@ComponentScan@EnableAutoConfiguration

2.Spring注解

注释使在Spring中配置依赖项注入更加容易。除了使用XML配置文件,我们还可以在类和方法上使用Spring Bean批注来定义bean 。之后,Spring IoC容器配置并管理Bean。

这是我们将在本文中讨论的注释的概述:

  • @ComponentScan扫描带注释的Spring组件
  • @EnableAutoConfiguration用于启用自动配置

现在让我们研究这两个注释之间的区别。

3.他们如何不同

这些注释之间的主要区别在于, @ComponentScan ComponentScan扫描Spring组件,而@EnableAutoConfiguration用于自动配置Spring Boot应用程序的类路径中存在的bean

现在,让我们更详细地研究它们。

3.1 @ComponentScan

在开发应用程序时,我们需要告诉Spring框架寻找Spring管理的组件。 @ComponentScan使Spring能够扫描诸如配置,控制器,服务以及我们定义的其他组件之类的东西。

特别是@ComponentScan 批注与@Configuration批注一起使用,以指定用于Spring扫描组件的软件包:

@Configuration

 @ComponentScan

 public class EmployeeApplication {

 public static void main(String[] args) {

 ApplicationContext context = SpringApplication.run(EmployeeApplication.class, args);

 // ...

 }

 }

**另外,Spring也可以从指定的包开始扫描,我们可以使用basePackageClasses()basePackages() .**如果未指定包,则它将声明@ComponentScan**批注的类的包视为起始包:**

package com.baeldung.annotations.componentscanautoconfigure;



 // ...



 @Configuration

 @ComponentScan(basePackages = {"com.tutorial.annotations.componentscanautoconfigure.healthcare",

 "com.tutorial.annotations.componentscanautoconfigure.employee"},

 basePackageClasses = Teacher.class)

 public class EmployeeApplication {

 public static void main(String[] args) {

 ApplicationContext context = SpringApplication.run(EmployeeApplication.class, args);

 // ...

 }

 }

在示例中,Spring将扫描healthcareemployee套餐以及Teacher类的组件。

Spring在指定的软件包及其所有子软件包中搜索@Configuration .另外, Configuration类可以包含@Bean批注,这些批注将方法注册为Spring应用程序上下文中的bean 。之后,@ ComponentScan批注可以自动检测此类bean:

@Configuration

 public class Hospital {

 @Bean

 public Doctor getDoctor() {

 return new Doctor();

 }

 }

**ComponentScan注释还可以扫描,检测和注册Bean,以使用@ @Component, @Controller, @Service@Repository**注释的类。

例如,我们可以创建一个Employee类作为组件,可以通过@ ComponentScan批注进行扫描:

@Component("employee")

 public class Employee {

 // ...

 }

3.2 @EnableAutoConfiguration

@EnableAutoConfiguration注释使Spring Boot能够自动配置应用程序上下文因此,它会基于类路径中包含的jar文件和我们定义的bean自动创建和注册bean。

例如,当我们spring-boot-starter-web依赖项时,Spring boot会自动配置Tomcat和Spring MVC。但是,如果我们定义自己的配置,则此自动配置的优先级较低。

@EnableAutoConfiguration批注的类的包被视为默认包。因此,我们应该始终@EnableAutoConfiguration批注,以便可以检查每个子包和类:

@Configuration

 @EnableAutoConfiguration

 public class EmployeeApplication {

 public static void main(String[] args) {

 ApplicationContext context = SpringApplication.run(EmployeeApplication.class, args);

 // ...

 }

 }

此外, @EnableAutoConfiguration批注提供了两个参数以手动排除任何参数:

我们可以使用exclude禁用我们不想自动配置的类的列表:

@Configuration

 @EnableAutoConfiguration(exclude={JdbcTemplateAutoConfiguration.class})

 public class EmployeeApplication {

 public static void main(String[] args) {

 ApplicationContext context = SpringApplication.run(EmployeeApplication.class, args);

 // ...

 }

 }

我们可以使用excludeName定义要从自动配置中排除的类名的完全限定列表:

@Configuration

 @EnableAutoConfiguration(excludeName = {"org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration"})

 public class EmployeeApplication {

 public static void main(String[] args) {

 ApplicationContext context = SpringApplication.run(EmployeeApplication.class, args);

 // ...

 }

 }

从Spring Boot 1.2.0开始,我们可以使用**@SpringBootApplication批注,该批注是@Configuration, @EnableAutoConfiguration, @ComponentScan EnableAutoConfiguration和@ComponentScan这三个批注及其默认属性的组合**:

@SpringBootApplication

 public class EmployeeApplication {

 public static void main(String[] args) {

 ApplicationContext context = SpringApplication.run(EmployeeApplication.class, args);

 // ...

 }

 }

4 结论

在本文中,我们了解了Spring Boot中@ComponentScan@EnableAutoConfiguration

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *