@Autowired、@Resource、@Qualifier

@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 "";
}

你可能感兴趣的:(Spring,java)