@resources和@autowrite的区别

@Resources按名字,是JDK的,@Autowired按类型,是Spring的。

在java代码中可以使用@Autowire或者@Resource注解方式进行装配,

@Resource

public class StudentService3 implements IStudentService {
    //@Resource(name="studentDao")
    private IStudentDao studentDao;

    private String id;


    public void setId(String id) {
    this.id = id;
    }

@Resource(name="studentDao") // 通过此注解完成从spring配置文件中查找名称为studentDao的bean来装配字段studentDao,如果spring配置文件中不存在 studentDao名称的bean则转向按照bean类型经行查找


@Autowired

public class StudentService3 implements IStudentService {
  //@Autowired
  private IStudentDao studentDao;

  private String id;
  
  public void setId(String id) {
       this.id = id;
   }

@Autowired

//通过此注解完成从spring配置文件中 查找满足studentDao类型的bean


这两个注解的区别是:
@Autowire 默认按照类型装配,默认情况下它要求依赖对象必须存在,不存在会NullpointException,如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可 以结合@Qualifier注解一起使用;


@Resource默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属 性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找 依赖对象.




@Autowired字段注入会产生警告,并且建议使用构造方法注入。而使用@Resource不会有警告。

2,不建议使用字段注入和setter注入的方法,前者可能引起NullPointerException,后者不能将属性设置为final。从spring4开始官方一直推荐使用构造方法注入。但是构造方法注入只能使用@Autowired,不能使用@Resource。

3,综上,如果要字段注入,使用@Resource;要构造方法注入,使用@Autowired。其实实际开发中个人觉得没什么区别。




你可能感兴趣的:(@resources和@autowrite的区别)