有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何强制库类在自动连接中使用bean

我在应用程序中遇到了一个场景,我调用了一个库类方法,该方法使用带有@Qualifier注释的自动连接。在我的例子中,行为是完全相同的,但是自动连线bean应该是不同的。这个自动连线bean只调用一个REST服务

我尝试用几个简单的类来展示场景:

public interface IMessage {
    public String getMessage();
}

public class HelloMessage implements IMessage {
    public String getMessage() {
        return "Hello";
    }
}

public class HiMessage implements IMessage  {
    public String getMessage() {
        return "Hi";
    }
}

public class PrintMessage { 
    @Qualifier("helloMessage")
    @Autowired
    private IMessage message;

    public void service() {
        System.out.println(message.getMessage());
    }
}

假设所有这些类都属于库。我试图实现的唯一一件事是HiMessagebean在PrintMessage类中自动连接。重写这个类将是一个简单的解决方案,但是由于service()方法的行为完全相同,所以我不想仅仅为了使用不同的自连线bean而重写它


共 (2) 个答案

  1. # 1 楼答案

    例如,在以下情况下,有必要提供限定符

    @Component
    @Qualifier("helloMessage")
    public class HelloMessage implements IMessage {
        public String getMessage() {
            return "Hello";
        }
    }
    

    希望这对你有帮助。干杯

  2. # 2 楼答案

    @Configuration类中,创建一个@Bean("helloMessage")注释的方法,该方法只返回所需的bean:

    @Bean("helloMessage)"
    public IMessage republishHiMessage() {
        return new HiMessage();
    }
    

    或者使用参数注入,如果所需对象已被称为hiMessage

    @Bean("helloMessage)"
    public IMessage republishHiMessage(@Qualifier("hiMessage") IMessage hiMessage) {
        return hiMessage;
    }