gpt4 book ai didi

java - Spring 轮廓注入(inject): don't inject a class without a profile

转载 作者:行者123 更新时间:2023-12-02 00:47:57 25 4
gpt4 key购买 nike

假设我在 Java 项目中使用 Spring,并且有以下接口(interface)和类:

public interface MyInterface { ... }

@Component
public class MyInterfaceMainImpl implements MyInterface { ... }

@Component
@Profile("mock")
public class MyInterfaceMockImpl implements MyInterface { ... }

@ContextConfiguration(locations = {"classpath:my-context.xml"})
@ActiveProfiles(profiles = {"mock"})
public class MyInterfaceTest extends AbstractTestNGSpringContextTests {
@Inject
private MyInterface myInterface;
...
}

假设my-context.xml启用了对包含我的接口(interface)及其实现类的包的组件扫描。当我将配置文件指定为“mock”时,我收到一条错误,内容如下:“预期有单个匹配的 bean,但发现了 2:...”。

知道如何避免我的非配置文件方法在注入(inject)期间成为匹配的 bean 吗?或者是为该主要实现类提供配置文件的唯一可能的解决方案?这是我试图避免的解决方案。

最佳答案

有两个选项:

  • 使用 @Primary 指示当两种实现都存在时首选 MyInterfaceMockImpl:

    @Component
    @Primary
    @Profile("mock")
    public class MyInterfaceMockImpl implements MyInterface { ... }
  • mock 处于 Activity 状态时,使用带有否定的 @Profile 来排除主实现:

    @Component
    @Profile("!mock")
    public class MyInterfaceMainImpl implements MyInterface { ... }

关于java - Spring 轮廓注入(inject): don't inject a class without a profile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24784165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com