spring - 为什么切换到具有显式@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
尝试加载@Import
ed by 的bean @SpringBootApplication
(这不是我所期望的)。那么应该如何使用单@Configuration
类呢?我@Imports
从一个以main
方法作为文档建议的类做(至少这是我所理解的)
我想到解决问题并使用推荐的单个@Configuration
类的第一件事是创建一个单独的@Configuraton
类并将@Import
s 放在那里。
我还有一个问题。如果我从上下文包类中删除了@Configuration
注释,现在又删除了它们,这是否意味着 @Bean 方法现在没有被代理。一个@Bean 方法调用另一个方法不是一个好主意,对吧(因为它们没有被代理)?@Import
解决方案
推荐阅读
- r - R中带有(anova)的for循环中的错误项
- java - ArrayBlockingQueue (ABQ) vs LinkedBlockingQueue (LBQ):为什么 LBQ 需要 AtomicInteger 计数器?
- asp.net - 使用连接插入语句
- amazon-web-services - Terraform 循环依赖
- pandas - 多年的整数熊猫分箱
- android - Android Tv Companionlibrary 导致重复类
- c# - 在将模型保存到数据库之前,在 asp.net core 中加密模式中的特定字段
- reactjs - 如何使用 testing-react-library 测试具有切换功能的隐藏文本?
- ansible - 如何在ansible中用“-”分隔单词
- php - 仅通过 FTP 从 FTP 服务器获取当前日期的文件