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

如何用外部/第三方Bean覆盖Autowired Spring Bean

冉锋
2023-03-14

在我的情况下,我希望客户机能够将自己的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"
    } 
}
@Component
public class ExternalConfigInjector implements ConfigInjector {
    public String getConfig() {
        return "EXTERNAL CONFIG"
    } 
}

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

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

共有1个答案

花飞尘
2023-03-14
  1. 您可以使用@conditionalonproperty注释
  2. 根据变量/参数的名称
  3. 使用@primary批注
  4. 使用@qualifier注释

推荐的免费课程(1.5小时)名为“Spring Framework And Dependency Injection For Beginners”,在www.udemy.com上解释了所有主要问题和用例。

 类似资料:
  • 我正在尝试覆盖一个外部组件的默认CSS,它不是在Material-UI或我的项目中开发的。在styled-components中,我可以使用根类并用自定义CSS替换它们。我如何用Material-UI-React做同样的操作? 假设我必须用新的颜色属性替换这两个类,我如何在材质样式中做到这一点呢? 这是我试过的,但没有运气! 我使用withStyles稍后将它们注入到组件中。

  • 问题内容: 我有使用内联样式的标记,但是我无权更改此标记。如何仅使用CSS覆盖文档中的内联样式?我不想使用jQuery或JavaScript。 HTML: CSS: 问题答案: 覆盖内联样式的唯一方法是使用CSS规则旁边的关键字。以下是一个示例。 重要笔记: 使用不是一个好的做法。因此,您应避免同时使用内联样式。 将关键字添加到任何CSS规则后,该规则就可以 强行优先 于该元素的 所有其他CSS规

  • 我希望外部文件的属性覆盖内部值(如果它们存在于外部文件中)。 在我的configuration类中,我使用PropertySource注释设置文件:

  • 对于Spring Boot2.1,默认情况下禁用bean重写,这是一件好事。 然而,我确实有一些测试,其中我使用mockito用模拟实例替换bean。在默认设置下,使用这种配置的测试将由于bean重写而失败。 我发现唯一有效的方法是通过应用程序属性启用bean重写: 但是,我真的希望确保测试配置的bean定义设置最小,这一点将由spring在禁用重写的情况下指出。 我正在重写的bean是 在导入到

  • 我正在制作一个简单的2D游戏。每次滴答,我都想检查一个效果队列,该队列将启动一个线程以获得特定效果(淡入淡出过渡、音频淡入淡出等)。例如,在菜单屏幕上按“播放”将向该队列添加“淡出”消息,该消息将被处理并启动一个线程,以在我的游戏面板上绘制一个黑色矩形,并增加阿尔法值。 我重写了绘制组件(),并将我的图形对象发送到我的游戏状态管理器,它将图形对象传递到当前状态的绘制()。我目前没有一个效果状态(也

  • 我在我的项目中使用lombok,并在POJO类上使用和注释生成和。我试图重写属性的setters方法,但它不起作用 我想检查JSON属性是空的还是空的,我想在Setter方法中设置默认值 工作场景: 失败的场景: 输出: 我也将此作为参考,但到目前为止运气不佳