我有一个messageListener,其目的是启动实现Client-interface的客户端。在编译时不知道Client-interface的不同实现。
messageListener使用Launcher-bean启动客户端。所以我的问题是我需要构建一个Launcher-bean,它将选定的Client-interface实现注入其中。我不知道该怎么做,或者我应该以不同方式解决问题?
public class MyMessageConsumer implements MessageListener {
public void onMessage(Message message) {
String clientType = message.getClientType();
//Here i need to construct a launcher-bean, which has the correct Client-implementation injected
launcher.startClient(message);
}
}
public class Launcher {
@Inject
private Client client;
public void startClient(Message message) {
...
client.start(message);
}
}
编辑:我意识到棘手的部分是找不到正确的实现,但我需要消息消息作为新请求发生。是否有可能理解后续的内容?
答案 0 :(得分:0)
你想要的是制片人。
这样,您可以将上下文实例的客户端与生成器分开。因此,将它们注入生产者并让它决定使用什么。
为了使其透明并避免模糊依赖,您可以使用@Dynamic限定符生成值。
@Inject
@Dynamic
Foo foo;
..............................
@Produces
@Dynamic
public Foo getFoo() {
//find out what implementation to use and return it
创建自己的限定符和制作人对谷歌来说非常简单。