官术网_书友最值得收藏!

2.4.2 靈活使用注解配置

在使用Spring依賴注入類型時,通常可以使用XML配置、Java代碼配置以及注解配置這三種方式。隨著Spring Boot框架的流行,使用注解配置已經成為目前最主流的開發方式。除了前面已經給出的最常見的@Autowired注解,Spring Boot框架還提供了一組非常有用的注解幫助我們更好地管理所注入的對象,包括@Primary注解和@Qualifier注解。

在Spring IoC容器中,針對HealthRecordService這樣一種接口類型,原則上容器只允許注入一個實現類。如果存在該類型的多個對象實例,那么容器就會報NoUniqueBean-DefinitionException,意味著容器無法決定選擇哪一個實例來進行注入。這時候就可以使用@Primary注解來幫助容器做出選擇,該注解的使用方式如代碼清單2-28所示。

代碼清單2-28 @Primary注解示例代碼

@Component
public class HealthRecordServiceImplA implements HealthRecordService {
    ...
}

@Component
@Primary
public class HealthRecordServiceImplB implements HealthRecordService {
    ...
}

這時候,Spring IoC容器只會注入HealthRecordServiceImplB這個實例類,這在管理針對某種類型的多個實例時非常有用。

和@Primary注解的應用場景類似,@Qualifier注解為我們選擇實例類進行注入提供了更加靈活的實現方式,如代碼清單2-29所示。

代碼清單2-29 @Qualifier注解示例代碼

@Component
@Qualifier("healthRecordServiceA")
public class HealthRecordServiceImplA implements HealthRecordService { }

@Component
@Qualifier("healthRecordServiceB")
public class HealthRecordServiceImplB implements HealthRecordService { }

可以看到,這里對不同的實現類,我們通過@Qualifier注解設置了不同的名稱,這樣在使用時就可以通過該名稱獲取不同的實例,如代碼清單2-30所示。

代碼清單2-30 通過@Qualifier注解指定不同實例名稱的示例代碼

@Autowired
@Qualifier("healthRecordServiceB")
private HealthRecordService healthRecordService;
主站蜘蛛池模板: 崇明县| 乡城县| 饶河县| 秀山| 区。| 仙游县| 冀州市| 泽库县| 苗栗县| 惠来县| 永和县| 台江县| 文昌市| 甘谷县| 承德县| 常宁市| 石渠县| 北流市| 黔西县| 马尔康县| 龙胜| 乌拉特后旗| 鄢陵县| 曲麻莱县| 资源县| 五河县| 绥阳县| 苍山县| 治多县| 宁海县| 观塘区| 辉县市| 漳浦县| 禹州市| 乡城县| 九龙城区| 顺平县| 台北市| 达州市| 竹溪县| 类乌齐县|