如何使用外部/第三方Bean覆盖自动装配的Spring Bean

时间:2017-11-12 20:40:20

标签: java spring autowired

我有一种情况,我想让客户端注入自己的bean,在我的类中实现一个公共接口,否则使用默认的bean。

举个例子:

public class TestClass {

    // Clients can inject this, otherwise use a default...
    @Autowired
    private ConfigInjector configInjector; 

}

我定义的界面和默认实现:

public interface ConfigInjector {
    String getConfig();
}

@Component
public class DefaultConfigInjector implements ConfigInjector {
    public String getConfig() {
        return "DEFAULT CONFIG"
    } 
}

外部客户端想要注入我的ConfigInjector接口的这个实现:

@Component
public class ExternalConfigInjector implements ConfigInjector {
    public String getConfig() {
        return "EXTERNAL CONFIG"
    } 
}

在TestClass中使用@Autowired,如果客户端尝试将TestClass与自己的ConfigInjector实现(ExternalConfigInjector)一起使用,则将存在多个ConfigInjector实现,从而导致 NoUniqueBeanDefinitionException 异常。

那么,我如何与客户共享我的TestClass,允许他们使用自己的ConfigInjector覆盖我的默认值?

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用@ConditionalOnProperty annotation
  2. 根据变量/参数的名称
  3. 使用@primary注释
  4. 使用@Qualifier注释
  5. 推荐免费课程(1.5小时) 在www.udemy.com上将“Spring Framework和Dependency Injection for Beginners”命名为 解释了所有主要问题和用例。