前面讲到了使用 XML 的方式提供元数据,如果使用注解的方式,如何提供 qualifier 的元数据?
其实很简单,在声明 bean 的时候直接使用上限定符注解就可以了。
比如:
@Component
@Qualifier("Action")
public class ActionMovieCatalog implements MovieCatalog {
// ...
}
@Component
@Genre("Action")
public class ActionMovieCatalog implements MovieCatalog {
// ...
}
@Component
@Offline
public class CachingMovieCatalog implements MovieCatalog {
// ...
}
:::tips 需要注意的是:如果是自定义的限定符注解,需要将注解上的 @Target 添加上对应的类型,比如 ElementType.METHOD ,因为在声明 bean 的时候需要用到类上、或则方法上 :::
在使用 @Bean
声明的时候,同样也是使用对应的限定符注解,比如
@Bean
@Genre("Comedy")
public MovieCatalog movieCatalog(){
return new SimpleMovieCatalog2();
}
:::info 与大多数基于注解的替代方案一样,请记住,注解元数据是与类定义本身绑定的,而 XML 的使用允许同一类型的多个 Bean 在其限定符元数据中提供变化,因为该元数据是按实例而不是按类提供的。 :::