几个注解的使用场景
@Qualifier的使用,这个可以学习一下
quarlifier在xml中的使用:
‘’
@Qulifier
@Resource :通过唯一名称引用集合或Map的bean
@Qualifier:一般和@Autowired一起使用,按类型自动注入时可能会有多个Bean实例的情况,可以使用@Qualifier注解缩小范围(或指定唯一),也可用于指定单独的构造器或方法参数。
代码:
@Component(value="invoker")
public class InterfaceInvoker {
private List<InjectInterface> list;
@Autowired()
@Qualifier(value="one")
public void setList(List<InjectInterface> list) {
this.list = list;
}
public void say(){
if(null!=list){
for (int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}else{
System.out.println("list为null");
}
}
}
@Component(value="one")
public class InterfaceImplOne implements InjectInterface {
}
@Component
public class InterfaceImplTwo implements InjectInterface {
}
结果:
injectList.InterfaceImplOne@54266750
xml文件中实现@Qualifier功能(不通过@Component)
通过独特名称而不是类型声明匹配,是否意味着在IOC容器中,有且仅有一个对象的resource注解为这个名称,在余下的任何类的实现中都不会存在另一个相同的resource注解?
是否是针对不同对象在于业务中的生命周期不同,所以需要限定调用同类型但拥有不同标识的对象?
@Qualifier
@Autowired 适用于fields,constructors,multi-argument methods这些允许在参数级别使用@Qualifier注解缩小范围的情况
@Resource适用于成员变量、只有一个参数的setter方法,所以在目标是构造器或一个多参数方法时,最好的方式是使用Qualifier
@Qualifier
按类型自动装配可能多个bean实例的情况,可以使用Spring的@Qualifier注解缩小范围(或指定唯一),也可以用于指定单独的构造器参数或方法参数
可用于注解集合类型变量
2.
@Qualifier-7
@Qualifier-6
@Qualifier-5
@Qualifier-4
@Qualifier-3
@Qualifier-2
@Qualifier
@Resource 适用于成员变量 一个参数的set方法,@Qualifier 使用于构造方法和多参数方法。
@qualifier:一般和@Autowired一起使用,有时候类型是接口的成员变量可能有多个实现类,按类型自动注入时可能会有多个Bean实例的情况,可以使用@Qualifier注解缩小范围(或指定唯一),指定使用哪个接口的实现类来赋给当前的成员变量,也可用于指定单独的构造器或方法参数。
@Resource 适用于成员变量 一个参数的set方法 @Qualifier 使用于构造方法和多参数方法。
@Qualifier
有时候类型是接口的成员变量可能有多个实现类,@qualifier 就是用来缩小范围的,指定使用那个接口的实现类来赋给当前的成员变量
@qualifier 也可以用在参数中,跟上面一样,只是这时候的参数是接口,他也可能是有多个实现类,用这个注解指明要使用的是哪个实现类
@Qualifier:一般和@Autowired一起使用,按类型自动注入时可能会有多个Bean实例的情况,可以使用@Qualifier注解缩小范围(或指定唯一),也可用于指定单独的构造器或方法参数。
代码:
@Component(value="invoker")
public class InterfaceInvoker {
private List<InjectInterface> list;
@Autowired()
@Qualifier(value="one")
public void setList(List<InjectInterface> list) {
this.list = list;
}
public void say(){
if(null!=list){
for (int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}else{
System.out.println("list为null");
}
}
}
@Component(value="one")
public class InterfaceImplOne implements InjectInterface {
}
@Component
public class InterfaceImplTwo implements InjectInterface {
}
结果:
injectList.InterfaceImplOne@54266750
xml文件中实现@Qualifier功能(不通过@Component)
笔记比记笔记
如何进行自定义qualifier注解:用@Qualifier注解自定义的注解
@Qualifier和@Resource的使用场景的区别,在实际情况中的使用需要斟酌的条件
@qualifier 和 @ resource 的区别,下一面还有。
@Qualifier 即可以使用在成员变量中,也可以使用在方法参数中。
Qualifier注解使用的条件
Qualifier注解使用注意事项