[英]How to autowire factorybean
我有一個ServiceListFactoryBean,它創建一個服務實現列表:
<bean id="services"
class="org.springframework.beans...ServiceListFactoryBean"
p:serviceType="ServiceInterface"/>
我可以使用applicationContext訪問服務而不會出現問題:
final List services = ctx.getBean("services", List.class));
我也可以成功使用trad constructor-arg注入:
<bean id="aClass" class="AClass">
<constructor-arg ref="services"/>
</bean>
但是,如果我嘗試自動依賴
@Autowired @Qualifier("services") private List services;
然后我得到一個BeanCreationException
引起的
FatalBeanException: No element type declared for collection [java.util.List]
我使用的是Spring 3.0。
事實證明答案是......
@Resource(name="services") private List services;
異常消息來自DefaultListableBeanFactory
,並且它正在編譯它無法自動裝配您的字段,因為List
沒有泛型類型(請參閱DefaultListableBeanFactory
第716行)。
嘗試在您的字段中添加通用簽名,呃
@Autowired @Qualifier("services") private List<Service> services;
我今天真正發現的是,當你需要將bean名稱映射到特定接口的實例時,不需要@Qualifier
和任何類型的FactoryBean
代碼。 Spring會為你找到並注入候選人。 @Resource
沒有做到這一點,以防萬一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.