【JAVA每日分享-6】客官来了解下@Autowired 、@Qualifier、@Resource

284 阅读1分钟

一、@Autowired

@Autowired默认按类型装配,如果发现找到多个bean,则按照name方式比对,如果还有多个,则报出异常。默认情况下必须要求注入对象必须存在,如果要允许注入对象不存在,可以设置它的required属性为false@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用。

    @Autowired
    @Qualifier("zhaozhao")
    ControlMapper controlMapper;
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
    boolean required() default true;
}

@Target说明了Annotation所修饰的对象范围:

  • 1.CONSTRUCTOR:用于描述构造器

  • 2.FIELD:用于描述域

  • 3.LOCAL_VARIABLE:用于描述局部变量

  • 4.METHOD:用于描述方法

  • 5.PACKAGE:用于描述包

  • 6.PARAMETER:用于描述参数

  • 7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

@Autowired 可不仅仅是serviceImpl中注入mapper接口,这种属性注入。

二、@Resource

默认按名称注入@Resource(name = "zhaozhao")则根据name属性注入找不到则报错,若无name属性则根据属性名称注入,如果匹配不成功则按照类型匹配匹配不成功则报错。

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

Resource相对Autowired 作用范围小一些。


每天多学一点点,阿里离我就不远。skr~