Spring Boot进阶:原理、实战与面试题分析
上QQ阅读APP看书,第一时间看更新

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;