@Autowired、@Resource、@Qualifier
1.@Autowired和@Resource
先看看@Autowired和@Resource的定义。
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {boolean required() default true;
}
@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
public @interface Resource {String name() default "";String lookup() default "";Class<?> type() default java.lang.Object.class;enum AuthenticationType {CONTAINER,APPLICATION}AuthenticationType authenticationType() default AuthenticationType.CONTAINER;boolean shareable() default true;String mappedName() default "";String description() default "";
}
功能:它们都是用于实现对象注入的。
使用范围:@Autowired可以用于构造器、方法、参数、字段、注解类型上。@Resourse用于字段、方法、各种类型上。因此@Resourse不能用于构造器注入。
参数信息:@Autowired不能注入指定名字的bean(首先会根据类名进行匹配,匹配不到根据变量名进行匹配),@Resource可以指定bean的名字注入。
注解出处:@Autowired出自Spring、@Resource出自JDK.
2.@Qualifier
可以指定名称将响应的bean的注入,可以和@Autowired配合使用。
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Qualifier {String value() default "";
}