如何在Spring中注入List实例?
什么有效
假设我有一个ArrayList的spring bean定义:
de en
现在我可以将它注入各种bean中,例如:
@Controller class Controller { @Autowired public Controller(ArrayList availableLanguages) { // ... } }
这很好用。
怎么打破
但是,如果我稍微更改我的控制器并使用类型List
而不是ArrayList
如下所示:
@Controller class Controller { @Autowired public Controller(List availableLanguages) { // ... } }
然后我得到一个String
类型的所有bean的列表,而不是我定义的bean。 但是我实际上想将List包装到一个不可修改的List中,但只有将我的依赖项降级到列表才能实现。
到目前为止发现了变通方法
以下XML文件:
de en
与此控制器一起使用:
@Controller class Controller { @Autowired public Controller(Object availableLanguages) { List theList = (List)availableLanguages; } }
虽然这个工作,额外的类型演员是丑陋的。
到目前为止的调查结果
我认为Spring 4.2.5(目前最新版本)中的集合有一个特殊处理,这似乎会造成所有麻烦。 当参数是扩展Collection
的接口时,它会创建特殊行为。 因此,我可以通过使用Object
或具体实现作为参数类型来解决。
题
有没有办法直接将列表注入bean? 怎么样?
使用@Qualifier将使用给定的限定符注入bean。 您可以将您想要成为bean的列表命名,并且可以正常工作。