@Autowired和@Resource的区别

发布时间 2023-07-11 16:07:15作者: 小陈code

@Autowired和@Resouce的区别


@Autowired默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。


@Autowired装配顺序

  • 先根据所需组件的类型到IOC容器中查找唯一的bean

    • 能找到唯一的bean,执行装配

    • 找不到,装配失败

    • 和所需类型匹配的bean不止一个:

      • 没有@Qualifier注解:则根据@Autowired注解标记的位置的成员变量的变量名作为bean的id来匹配
        • 能找到,执行装配、到不到,装配失败
      • 有@Qualifier注解:则根据@Qualifier注解后指定的名称作为bean的id来匹配
        • 能找到,执行装配、到不到,装配失败

@Resource装配顺序

  • 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  • 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  • 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  • 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则再按照类型进行匹配,如果匹配则自动装配;