- Spring Boot進階:原理、實戰與面試題分析
- 鄭天民
- 498字
- 2022-07-05 09:41:45
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;
推薦閱讀
- DevOps:軟件架構師行動指南
- The Supervised Learning Workshop
- C#高級編程(第10版) C# 6 & .NET Core 1.0 (.NET開發經典名著)
- Learn to Create WordPress Themes by Building 5 Projects
- Java Web應用開發技術與案例教程(第2版)
- Getting Started with SQL Server 2012 Cube Development
- Java項目實戰精編
- QGIS By Example
- Mastering openFrameworks:Creative Coding Demystified
- NGINX Cookbook
- Learning Apache Cassandra
- Windows Embedded CE 6.0程序設計實戰
- Oracle數據庫編程經典300例
- Java Web開發實例大全(基礎卷) (軟件工程師開發大系)
- 愛上C語言:C KISS