@Autowired与@Resource注解的区别

编程

@Autowired

全路径为:org.springframework.beans.factory.annotation.Autowired,为spring提供的注解

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface Autowired {

boolean required() default true;

}

@Autowired采取的策略为按照类型(byType)注入。默认情况下要求依赖必须存在,如果允许为null值,可以设置他的required属性为false。

如果想按照名称来装配,需要结合@Qualifier注解一起使用。

public class UserserviceImpl{

@Autowired

@Qualifier("userMapper")

private UserMapper userMapper;

}

@Resource

全路径为:javax.annotation.Resource

@Resource默认按照ByName自动注入,由J2EE提供

@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有两个重要的属性,name和type,spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。如果既不指定name也不指定type,则默认按照byName自动注入。如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

参考博文:

  • https://www.cnblogs.com/williamjie/p/9198157.html
  • https://www.cnblogs.com/jichi/p/10073404.html

以上是 @Autowired与@Resource注解的区别 的全部内容, 来源链接: utcz.com/z/514314.html

回到顶部