簡體   English   中英

具有相同類名(不同包)的兩個Spring Service Bean即使使用限定符也會拋出Error

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM