为什么Spring Boot Application类需要@Configuration注释?

var*_*nkr 35 java spring spring-boot

我正在学习Spring框架,但我无法理解@Configuration注释的确切含义以及应该注释哪些类.在Spring Boot文档中,据说Application类应该是@Configurationclass.

Spring Boot支持基于Java的配置.尽管可以使用XML源调用SpringApplication.run(),但我们通常建议您的主要源是@Configuration类.

试图了解@Configuration我发现用类注释一个类@Configuration表明该类可以被Spring IoC容器用作bean定义的来源.

如果是这样,那么这个应用程序类如何成为bean定义的来源?

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class App 
{
    public static void main(String[] args) throws Exception {
        SpringApplication.run(App.class, args);    
    }
}
Run Code Online (Sandbox Code Playgroud)

我几乎了解了关于Spring的大多数其他基本概念,但是我无法理解类的目的@Configuration或哪些类应该是@Configuration类?有人可以请帮助.谢谢 !!

Art*_*kov 33

你明白了.

@组态

@Configuration是xml文件的模拟.通过使用@Bean注释定义方法,此类是bean定义的来源.

@Configuration 是:

  • 如果sources在调用SpringApplication.run()方法时已经在参数中传递了带注释的类,则不需要 ;
  • 当您没有显式传递带注释的类时,它是必需的,但它位于@ComponentScan主配置类的注释中指定的包中.

为了便于阅读,即使是明确传递的类sources也可以注释@Configuration- 只是为了更清楚地显示意图.

你当前的类不是bean定义的真正来源,因为它没有任何,但如果你有@Bean注释方法,Spring会看到它们.

@EnableAutoConfiguration

可以使用或不使用@Configuration.它告诉Spring根据你在类路径中的内容来设置一些基本的基础结构.它是通过调用一个所谓的导入类来完成的,该导入类是从包含的@Import注释的值派生而来的@EnableAutoConfiguration.只有一个类应该注释@EnableAutoConfiguration,重复它不会做任何事情.

这个答案也可能有助于理解Spring Boot初始化过程:Spring Boot中的哪一段代码实际上为SpringMVC注册了调度程序servlet?


Nik*_*kem 11

我认为Spring Boot的@SpringBootApplication注释自动应用的主要原因@Configuration是允许在同一个类中添加bean定义.Spring Boot的主要目标之一是允许您快速创建应用程序而无需额外移动.因此,通过允许将bean定义直接添加到Application的类中,您无需创建额外的类来保存配置.你只有一个班级就是这样.