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

时间:2016-08-31 10:45:15

标签: java spring spring-boot

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

  

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类的目的?有人可以请帮助。谢谢!!

2 个答案:

答案 0 :(得分:27)

你明白了。

@Configuration

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

@Configuration是:

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

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

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

@EnableAutoConfiguration

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

这个答案也可能有助于理解Spring Boot初始化过程:Which piece of code in Spring Boot actually registers dispatcher servlet for SpringMVC?

答案 1 :(得分:8)

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