我在应用程序中遇到了一个场景,该场景中我正在调用使用带有@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而覆盖它。
答案 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";
}
}
希望这对您有帮助。欢呼!