当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-Autowired 和 Resource 的区别

金三银四精选java面试题-Autowired 和 Resource 的区别

来源:图灵教育
时间:2023-12-06 13:23:20
 

Autowired 和 Resource 的区别

@Autowired和@Resource都是用于依赖注入的注解,用于将其他组件或资源自动注入到目标对象中。比如说:

@Autowired
private bean A;

@Resource
private Bean B;

但是它们在使用方式和功能上有一些区别:

  1. @Autowired:在获取 Bean 时,先通过类型进行匹配在根据名称进行匹配。示例如下:
@Component
class ABean implements Bean {}
@Component
class BBean implements Bean {}

@Service
class Test {

    //自动装配失败,按照类型找到两个 Bean:ABean 与 BBean,在根据名称 bean 未找到目标Bean, 装配失败。
    @Autowired
    private Bean bean;

    //自动装配成功,按照类型找到两个 Bean:ABean 与 BBean,在根据名称 ABean 找到目标Bean,装配成功。
    @Autowired
    @Qualifier("ABean")
    private Bean bean;

    //自动装配成功,按照类型找到两个 Bean:ABean 与 BBean,在根据名称 BBean 找到目标Bean,装配成功。
    @Autowired
    private Bean BBean;  
}
  • Spring框架的注解,基于类型进行依赖注入。
  • 支持通过@Qualifier注解指定具体的Bean名称进行注入。
  • 可以用于构造器、字段、方法或者参数上。
  1. @Resource:在获取 Bean 时,先通过名称进行匹配,在根据类型进行匹配。示例如下:
@Component
class ABean implements Bean {}
@Component
class BBean implements Bean {}

@Service
class Test {

    //自动装配失败,按照名称未找到目标Bean,在根据类型找到两个 Bean:ABean 与 BBean ,装配失败。
    @Resource
    private Bean bean;

    //自动装配成功,按照名称找到目标Bean,装配成功。
    @Resource(name = "ABean")
    private Bean bean;  
    
    //自动装配成功,按照名称找到目标Bean,装配成功。
    @Resource
    private Bean BBean;
}
  • 是Java EE规范中定义的注解,在Java 6及以上版本中可用。
  • 默认按照属性名称进行查找,也可以通过name属性指定具体的Bean名称进行注入。
  • 只能用于字段、setter方法或者参数上。