我的系统正在使用各种协议(protocol)。我标记一个接口(interface)并提供适当的实现。例如,SSHprotocol
和 HttpProtocol
都实现了 Protocol
。我将来可能会添加多个。现在我的类(class)如下:-
class Test {
@Autowired
private Protocol protocol;
public void getProtocol(String name) {
return protocol;
}
}
getProtocol
应根据 Protocol
名称返回一个 Protocol
对象。简而言之,我希望 Spring 根据名称参数 Autowiring 特定的 bean。
spring支持这个吗?我可以有多个带有相应限定符的 @Autowired
。但这可能会让我编写 10-15 个带有相应 Autowiring 注释的变量。但代码太多,难以管理。工厂可能是一个替代方案,但这将如何解决我的问题?
最佳答案
您可以 Autowiring map 类型的字段,如下所示:
@Autowired
private Map<String, Protocol> protocols;
Spring 将使用 bean 名称作为键、bean 实例作为值来填充映射。所以在你的 getProtocol 方法中你可以这样做
public void getProtocol(String name) {
return protocols.get(name);
}
您可以通过在组件注释上指定值来调整 Bean 的名称:
@Component("http")
public class HttpProtocol ...
关于java - 基于方法参数的 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34219307/