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

我正在学习Spring框架,但我无法理解@Configuration注释到底意味着什么以及应该注释哪些类。 在Spring Boot文档中,据说Application类应该是@Configuration类。

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); } } 

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

你明白了。

@组态

@Configuration是xml文件的模拟。 通过使用@Bean批注定义方法,这些类是bean定义的来源。

@Configuration是:

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

为了便于阅读,甚至可以使用@Configuration注释甚至作为sources显式传递的类 – 只是为了更清楚地显示意图。

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

@EnableAutoConfiguratiom

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

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

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