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

2022-08-31 20:40:35

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

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

试图了解我发现,用 标记类表示Spring IoC容器可以使用该类作为bean定义的源。@Configuration@Configuration

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

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

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


答案 1

你理解正确。

@Configuration

@Configuration是 xml 文件的模拟文件。此类类是 Bean 定义的源,方法是使用注释定义方法。@Bean

@Configuration是:

  • 不需要,如果在调用方法时已经在参数中传递了带注释的类;sourcesSpringApplication.run()
  • 必需,如果未显式传递带批注的类,但它位于主配置类的批注中指定的包中。@ComponentScan

为了便于阅读,即使是显式传递的类,也可能被注释 - 只是为了更清楚地显示意图。sources@Configuration

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

@EnableAutoConfiguration

可带或不带 使用。它告诉Spring设置一些基本的基础设施,根据你在类路径中拥有的内容来判断。这是通过调用一个所谓的 import 类来完成的,该类派生自包含的注释的值。只应用 一个类进行注释,复制它不会执行任何操作。@Configuration@Import@EnableAutoConfiguration@EnableAutoConfiguration

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


答案 2

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


推荐