当前位置: 首页 > 知识库问答 >
问题:

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

单于奇略
2023-03-14

我有两个给定接口的实现,都用@Component注释。

src/main中有一个实现-

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

@Runwith(SpringRunner.class)、@SpringBoottest、@ContextConfigation、@ComponentScan、@EnableAutoConfigation

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

包装结构:

  • 代码
    • 主要的,主要的
      • 包装
        • IIimplementationCore.java
          • IImplementationTest.java
          • ABCTest.java

          我知道的解决方案:

          • 为 IImplementationCore 注释@Primary.java可以解决此问题。

          不知何故,我不喜欢将某个东西强制为primary,因为由于src/test中的一些bean冲突,而不是由于核心实现中的一些实际冲突,它被注释为primarl。我还有什么选择?我正在寻找的是,有没有一种方法可以只考虑src/main中的bean,而不考虑src/test中的beans?还是有更好的方法?

共有1个答案

樊运乾
2023-03-14

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

@Component
@Profile({"a", "b"})
public IImplementationCore implements YourInterface {
}

以相同的方式指定测试实现的概要文件。

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

//other annotations
@ActiveProfiles("a")
public TestClass {
}
 类似资料:
  • 考虑这个例子,其中主应用程序是两个模块的消费者:一个提供电子邮件服务,另一个提供日志服务。 app/email/email.service.ts app/email/email.module.ts providers: [ EmailService ], }) export class EmailModule { } 电子邮件服务api需要一些由字符串api-config标识的配置设置,由DI

  • 小雪再 pull 的时候遇到了冲突。 → git pull --rebase remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0 Unpacking objects

  • 我试图将Postgres用作文档存储,但在Postgres解析器似乎不喜欢JSONB操作符的情况下,当我试图有效地向上插入文档时,遇到了一个问题。 我有一张桌子: 我尝试用以下方式插入数据: 我收到这条错误消息: 我试过数据- 我想将标识符列(示例中的a)留在JSON中,而不是使其成为表上的列。 我正在尝试做的事情目前是否得到支持?

  • (当我在打字的时候,我想试试阴影,我现在就做)谢谢

  • 我有几个EJB3。x无状态会话bean,未定义接口。我需要将这些bean注入到Springbean中,但我无法这样做。 无接口EJB: 我的豆子: 还有我的豆子。xml 在初始化Spring容器时,我得到以下错误: 异常本身非常清楚——spring容器期望MyBean有一个本地接口视图作为其业务接口;但是,我没有(也不能介绍)。 非常感谢您的帮助!

  • 问题内容: 我正在使用一个已定义的拦截器,我想从拦截器中通过DAO层进行db调用,所以我如何将Spring bean注入到struts拦截器中。是否可以将spring bean注入到struts拦截器中,任何人都可以提出任何想法在此。 问题答案: 编辑 由于不需要将拦截器声明为Spring bean,因此删除了不必要的部分。感谢@AleksandrM对其进行测试。 就像使用Actions一样,(如