如何强制库类在自动装配中使用您的bean

时间:2018-09-23 16:01:23

标签: java spring autowired

我在应用程序中遇到了一个场景,该场景中我正在调用使用带有@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());
    }
}

假设所有这些类都属于库。我唯一要实现的是将HiMessage类中的PrintMessage bean自动装配。覆盖此类是一个简单的解决方案,但是由于service()方法的行为是完全相同的,因此我不想仅因为使用其他自动装配的bean而覆盖它。

2 个答案:

答案 0 :(得分:0)

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

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

或使用参数注入(如果所需的对象已经被称为hiMessage

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

答案 1 :(得分:0)

例如,在以下情况下,必须提供限定词。

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

希望这对您有帮助。欢呼!