java - 为什么 Spring Boot Application 类需要有 @Configuration 注解?

标签 java spring spring-boot

我正在学习 Spring 框架,但我不明白 @Configuration 注释的确切含义以及应该注释哪些类。在 Spring Boot 文档中,据说 Application 类应该是 @Configuration 类。

Spring Boot favors Java-based configuration. Although it is possible to call SpringApplication.run() with an XML source, we generally recommend that your primary source is a @Configuration class.

尝试了解@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是:

  • 不需要,如果您已经通过了 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?

关于java - 为什么 Spring Boot Application 类需要有 @Configuration 注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39247487/

相关文章:

java - Spring Java 配置和 BeanFactoryPostProcessor

java - Spring 响应实体返回

spring-boot - Liquibase 4.0 中删除了通过绝对路径指定文件

java - Java 中多维数组的 ClassCastException

spring - 为存储库配置 beans 文件

java - 我应该在 Google App Engine 中使用 session 吗?

spring - 如何在 NetBeans IDE 中更新 Spring 和 Hibernate 库?

java - Spring注入(inject)接口(interface)的两个实现以使用桥接设计模式

java - Scanner.close() 的作用是什么?

java - Apache Camel : How to test for instance of Set<CustomObject>