首页 > 解决方案 > 为什么切换到具有显式@Imports 的单个@Configuration 类会破坏@WebMvcTest?

问题描述

我有一个非常简单的应用程序。我的项目结构是:

.
├── App.java
├── context
├── controllers
├── dao
├── mappers
└── service

最初的上下文文件夹包含由from@Configuration自动拾取的多个类@ComponentScan@SpringBootApplication

当前的文档说:

Spring Boot 支持基于 Java 的配置。尽管可以将 SpringApplication 与 XML 源一起使用,但我们通常建议您的主要源是单个@Configuration类。通常,定义 main 方法的类是作为主要方法的良好候选者@Configuration

...您无需将所有内容都@Configuration放在一个班级中。注解可@Import用于导入其他配置类。

我决定遵循推荐的方式并从上下文文件夹@Configuration中的配置类中删除注释。

现在我的 App.java 看起来像这样:

@SpringBootApplication
@Import({CachingConfig.class, CustomDataSourceConfiguration.class, QueryDslConfiguration.class})
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

请注意,我没有@Configuration在带有main方法的类上使用,因为已经有@SpringBootApplication.

不幸的是,在更改后,我的@WebMvcTest类测试应用程序控制器时遇到了问题。似乎现在@WebMvcTest尝试加载@Imported by 的bean @SpringBootApplication(这不是我所期望的)。那么应该如何使用单@Configuration类呢?我@Imports从一个以main方法作为文档建议的类做(至少这是我所理解的)

我想到解决问题并使用推荐的单个@Configuration类的第一件事是创建一个单独的@Configuraton类并将@Imports 放在那里。

我还有一个问题。如果我从上下文包类中删除了@Configuration注释,现在又删除了它们,这是否意味着 @Bean 方法现在没有被代理。一个@Bean 方法调用另一个方法不是一个好主意,对吧(因为它们没有被代理)?@Import

标签: springspring-boot

解决方案


推荐阅读