@Resource和@Autowired的区别

  • Post author:
  • Post category:其他


@Resource和@Autowired的区别是什么?

这两者都是用于对象注入的注解。

@Resource是默认按照名称进行注入(byName)。@Autowired是按照类型进行注入(byType)。

@Resource是javaEE提供的,支持jdk1.6以上。@Autowired是spring提供的。

@Resource有两个重要属性,name和type,name属性指定byName,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为name名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性明作为bean名称寻找依赖对象。需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然寻找不到依赖对象时,@Resource注解会退回到按类型装配,单一旦指定了name属性,就只能按名称进行装配了。@Autowired按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按照名好处呢给装配,可以结合@Qualifier注解一起使用。

如果一个接口有两个实现类。那么通过类型将无法解决。我们可以通过使用@Primary或者@Qualifier注解进行解决。

@primary是用于service层的实现类上,用于标明在接口的多个实现类上有先加载标注有@primary注解的类。

@Qualifier注解作用于Controller层,通过@Qualifier指明加载类的名字进行加载。

public interface AAA{
}

@primary //当注入AAA是有限使用BBB类
public class BBB implement AAA{
}

public class CCC implement AAA{
}

public class queryController{

@Resource(name = "bBB")
private AAA aAA;//正常

@Autowired
private AAA aAA;//错误

@Autowired
@Qualifier("bBB")
private AAA aAA;//正常

}



版权声明:本文为qq_43675092原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。