跳到主要内容

请简述@Autowired和@Resource之间的区别 ?

参考答案:

@Autowired@Resource 都是 Spring 框架中用于自动装配 bean 的注解,但是它们之间有一些重要的区别。

  1. 来源不同:

    • @Autowired 是 Spring 框架提供的注解,从 Spring 2.5 版本开始引入。
    • @Resource 是来自于 JSR 250 规范,是 Java 标准的一部分,从 Java EE 5 开始提供。
  2. 注入方式不同:

    • @Autowired 是按类型(byType)进行注入的,Spring 容器会根据需要注入的字段、方法或构造函数的参数类型来查找匹配的 bean。如果找到多个匹配的 bean,Spring 会根据 bean 的名称或 @Qualifier 注解进行区分。
    • @Resource 既可以按类型(byType)注入,也可以按名称(byName)注入。默认情况下,它会先尝试按名称进行注入,如果找不到匹配的 bean,再尝试按类型进行注入。在 @Resource 注解中,可以通过 name 属性指定 bean 的名称,通过 type 属性指定 bean 的类型。
  3. 是否支持 null 值:

    • @Autowired 注解的字段、方法或构造函数如果没有找到匹配的 bean,Spring 会抛出一个异常。但是,可以通过设置 required 属性为 false 来改变这个行为,使得在没有找到匹配的 bean 时不会抛出异常,而是将字段、方法或构造函数的参数设置为 null。
    • @Resource 注解的字段、方法或构造函数如果没有找到匹配的 bean,默认情况下会将字段、方法或构造函数的参数设置为 null。但是,也可以通过设置 required 属性为 true 来改变这个行为,使得在没有找到匹配的 bean 时抛出一个异常。

总的来说,@Autowired@Resource 都是用于实现依赖注入的注解,但是它们在来源、注入方式和是否支持 null 值等方面有所不同。在选择使用哪个注解时,应该根据具体的需求和场景来决定。