@Autowired與@Qualifer的使用區別備忘
使用 @Autowired 註釋進行byType注入,如果需要 byName(byName 就是通過 id 去標識)注入,增加 @Qualifier 註釋
@Qualifer 如果沒有的話,報的錯如下:
no unique bean of type [org.springframework.transaction.PlatformTransactionManager] is defined:expected single matching bean but found 2: [TransactionManager, ImsTransactionManager]
原因:
比如配置檔案中有二個 bean.
表面看起來是不同型別的類,但是由於在 *service 裡面注入的屬性型別是 PlatformTransactionManager。由於上面的二個 bean 都實現了這個接口.這樣 @Autowired 時,由於是 byType 注入,就不能識別,此時就需要再加上 @Qualifer 通過 id 去識別。<bean id="jmstransactionmanager" class="org.springframework.jms.connection.jmstransactionmanager"> <property name="connectionfactory" ref="advancedconnectionfactory" /> </bean> <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource"> <ref bean="cpcdatasource" /> </property> </bean>
而如果沒有使用 @Service 的話,報錯如下:
no unique bean of type ..... expected at least 1 matching bean
注意,這與上面的提示資訊區別.