E2r*_*abi 54 java spring spring-mvc spring-boot
Spring Boot中的注释@ComponentScan和@EnableAutoConfiguration注释有什么区别?是否有必要添加这些?没有这些注释,我的应用程序工作得很好.我只想了解为什么要添加它们.
Sha*_*eer 62
Spring Boot中的@ComponentScan和@EnableAutoConfiguration注释有什么区别?
@EnableAutoConfiguration 注释告诉Spring Boot根据您添加的jar依赖项"猜测"您将如何配置Spring.例如,如果HSQLDB在您的类路径上,并且您没有手动配置任何数据库连接bean,那么Spring将自动配置内存数据库.
@ComponentScan告诉Spring在指定的包中寻找其他组件,配置和服务.Spring能够从预定义的项目包中自动扫描,检测和注册您的bean或组件.如果未指定包,则将当前类包作为根包.
是否有必要添加这些?
如果您需要Spring启动自动配置,@EnableAutoConfiguration则需要为您执行所有操作.您无需手动添加它,spring将根据您提供的注释在内部为其添加.
其实@SpringBootApplication注释等同于使用@Configuration,@EnableAutoConfiguration并@ComponentScan与他们的默认属性.
也可以看看:
Sha*_*neR 14
Spring Boot的一个主要优点是它的注释驱动与传统的基于xml的配置相比,@ EnableAutoConfiguration 根据其包含的jar文件自动配置Spring应用程序,它根据pom.xml中的依赖项设置默认值或帮助程序.通常根据类路径和定义的bean应用自动配置.因此,我们不需要定义任何DataSource,EntityManagerFactory,TransactionManager等,并且基于类路径神奇地,Spring Boot自动创建适当的bean并为我们注册它们.例如,当您的类路径中存在tomcat-embedded.jar时,您可能需要TomcatEmbeddedServletContainerFactory(除非您已经定义了自己的EmbeddedServletContainerFactory bean).@EnableAutoConfiguration有一个exclude属性来显式地禁用自动配置,否则我们可以简单地将它从pom.xml中排除,例如,如果我们不希望Spring配置tomcat然后从spring-boot-starter-中排除spring-bootstarter-tomcat网页.
@ComponentScan为spring组件扫描提供了范围,它只是通过提供的基本包并获取@Bean或@Autowired等所需的依赖关系.在典型的Spring应用程序中,@ ComponentScan用于配置类,用@注释的那些组态.配置类包含使用@Bean注释的方法.这些@Bean注释方法生成由Spring容器管理的bean.@ComponentScan注释将自动检测这些bean.有一些注释使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();
}
}
Run Code Online (Sandbox Code Playgroud)
@EnableAutoConfigurationin spring boot 根据您在类路径中添加的 jars 告诉您要如何配置 spring。例如,如果您spring-boot-starter-web在类路径中添加依赖项,它会自动配置 Tomcat 和 Spring MVC。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
您可以将@EnableAutoConfiguration注释与@Configuration注释一起使用。它有两个可选元素,
例子:
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
@SpringBootApplication是@EnableAutoConfigurationSpring Boot 1.2 中引入的较新版本。
@SpringBootApplication 是三个注解的组合,
@Configuration - 用于基于 Java 的配置类。
@ComponentScan - 要启用组件扫描,将自动扫描应用@SpringBootApplication 的根包下的所有包和子包。
@EnableAutoConfiguration-
基于类路径中添加的 jar启用类的自动配置。
@ComponentScan启用组件扫描,以便您创建的 Web 控制器类和其他组件将被自动发现并在 spring 的应用程序上下文中注册为 bean。您可以指定将扫描以自动发现和注册 bean 的基本包。
可选元素之一是,
例子,
@ComponentScan(basePackages = {"com.example.test"})
@Configuration
public class SpringConfiguration { }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43133 次 |
| 最近记录: |