一、@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~