[英]Two Spring Service Beans with same Class Name (different package) are throwing Error even with qualifier
我有以下......
package package1;
@Service
@Qualifier("kb")
public class UserService {
...
}
package package2;
@Service
@Qualifier("user")
public class UserService {
...
}
@Autowired
@Qualifier("user")
package2.UserService p2;
@Autowired
@Qualifier("kb")
package1.UserService p1;
但當我嘗試運行時,我得到......
org.springframework.beans.factory.BeanDefinitionStoreException:無法解析配置類[boot.Application]; 嵌套異常是org.springframework.context.annotation.ConflictingBeanDefinitionException:bean類[package1.UserService]的注釋指定bean名稱'userService'與同名和類[package2.UserService]的現有非兼容bean定義沖突
我如何擁有2個同名服務?
從類中刪除@Qualifier,僅在自動裝配時使用@Qualifier
@Service("kb")
public class UserService {
...
}
package package2;
@Service("user")
public class UserService {
...
}
來自@Qualifier javadoc
**
* This annotation may be used on a field or parameter as a qualifier for
* candidate beans when autowiring. It may also be used to annotate other
* custom annotations that can then in turn be used as qualifiers.
*/
你需要在這里了解@Qualifier的目的。
當您創建多個相同類型的bean並且只想使用屬性連接其中一個bean時,可能會出現這種情況。 在這種情況下,您可以使用@Qualifier注釋和@Autowired通過指定要連接的確切bean來消除混淆。
你要做的是創建兩個具有相同名稱但在不同包中的類。 為此,您需要將服務的名稱指定為@Service注釋的值參數,以區分這兩者:
package package1;
@Service("kb")
public class UserService {
...
}
package package2;
@Service("user")
public class UserService {
...
}
@Autowired
@Qualifier("user")
package2.UserService p2;
@Autowired
@Qualifier("kb")
package1.UserService p1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.