首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring注入冲突src/main vs src/test

Spring注入冲突src/main vs src/test
EN

Stack Overflow用户
提问于 2022-03-15 08:33:36
回答 1查看 100关注 0票数 0

对于给定的接口,我有两个实现,它们都使用@Component进行注释。

一个实现在src/main -> IImplementationCore.java中,另一个实现在src/test -> IImplementationTest.java中。

我在src/test中有一个测试类ABCTest.java,它用

@RunWith(SpringRunner.class),@SpringBootTest,@ContextConfiguration,@ComponentScan,@EnableAutoConfiguration

我希望这个ABCTest.java在运行测试时注入IImplementationCore。但它正在注射IImplementationTest.java。

包装结构:

  • 钢筋混凝土
      • 封装
        • IImplementationCore.java

代码语言:javascript
复制
- test 
    - package 
        - IImplementationTest.java
代码语言:javascript
复制
    - package2 
        - ABCTest.java

我知道的解决办法:

  • 为IImplementationCore.java注释@Primary解决了这个问题。

在某种程度上,我不喜欢强制某些东西成为主要的,因为由于src/test中的某些bean冲突,它被注释为主要的,而不是由于核心实现中的一些真正的冲突。我还有别的选择吗?我要找的是,是否有一种方法只考虑src/main的bean,而不考虑src/test的bean?还是有更好的方法?

EN

回答 1

Stack Overflow用户

发布于 2022-03-15 09:04:49

您可以在实现中使用@Profile注释。只有当指定的配置文件/s当前处于活动状态时,它才会加载bean。

代码语言:javascript
复制
@Component
@Profile({"a", "b"})
public IImplementationCore implements YourInterface {
}

以相同的方式指定用于测试实现的配置文件。

如果这个测试类非常具体,比如它是唯一需要实现核心的类,那么您可以在它上使用@ActiveProfiles来激活这个测试类与当前不同的配置文件。

代码语言:javascript
复制
//other annotations
@ActiveProfiles("a")
public TestClass {
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71479150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档