我有各种协议,我的系统正在使用.我标记了一个接口并提供了适当的实现.例如SSHprotocol
,HttpProtocol
两个工具Protocol
.我将来可能会添加多个.现在我有一个课程如下: -
class Test { @Autowired private Protocol protocol; public void getProtocol(String name) { return protocol; } }
本getProtocol
应返回一个Protocol
基于对象Protocol
的名字.总之,我希望Spring根据name参数自动装配特定的bean.春天是否支持这个?我可以有多个@Autowired
相应的限定符.但这可能会让我用相应的自动装配注释编写10-15个变量.但这太多的代码使得难以管理.工厂可能是一个替代方案,但如何解决我的问题?
您可以自动装配地图类型的字段,如下所示:
@Autowired private Mapprotocols;
然后Spring将使用bean名称作为键并将bean实例作为值填充映射.所以在你的getProtocol方法中你可以做到
public void getProtocol(String name) { return protocols.get(name); }
您可以通过在组件注释上指定值来调整Bean的bean名称:
@Component("http") public class HttpProtocol ...