@Autowired与@Resource在实现对象注入时的区别

 更新时间:2023年04月21日 11:36:04   作者:窦业童  
这篇文章主要介绍了@Autowired与@Resource在实现对象注入时的区别,有需要的朋友可以借鉴参考下,希望能够有所帮助

简述

  • @Autowired 是来⾃于 Spring的注解,⽽ @Resource 来⾃于 JDK 的注解;

2.@Autowired 可⽤于 Setter 注⼊、构造函数注⼊和属性注⼊,⽽ @Resource 只能⽤于 Setter 注 ⼊和属性注⼊,不能⽤于构造函数注⼊

3.使用时设置的参数不同: @Resource 比@Autowired 支持更多的参数设置,例如 name 设置,根据名称获取 Bean。下面详细介绍

详解

相同点1:属性注入(Field Injection)

@Autowried

@Autowired//自动装配
private UserService userService;

@Resource

@Resource
private UserService userService;

常见面试题:

注入属性的优缺点:

优点:使用简单方便

缺点:

1.功能缺陷:不能注入一个不可变的对象(final对象)

为什么不能注入一个final修饰的变量呢?\color{green}{为什么不能注入一个final修饰的变量呢?}为什么不能注入一个final修饰的变量呢?

因为Spring也要遵循Java的规范,final修饰的变量必须满足1.使用时直接赋值,或者:2.构造方法赋值

2.通用性问题:只适用于IOC框架(容器)

3设计原则问题,因为属性注入简单方便,所以开发者很容易就违背了单一设计原则。

相同点2:setter注入

//2. setter 注入(Setter Injection)
private UserService userService;
@Autowired
public void setUserService(UserService userService){
    this.userService = userService;
}
//使用Resource实现setter注入
private UserService userService;
@Resource
public void setUserService(UserService userService){
    this.userService = userService;
}

setter注入的优点:符合单一设计原则(一个setter只针对一个对象)

缺点:

  • 和属性注入一样,不能注入一个不可变的对象(final对象)
  • 因为setter可以被调用多次,注入对象可以被修改,存在被篡改的可能

不同点1:@Autowried可以使用构造方法注入,而@Resource不支持构造方法注入

@Autowried

//3. 构造方法注入(constructor Injection)
private UserService userService;
//当当前类里面只有一个构造方法的时候,@Autowired 可以省略,当存在多个构造方法时Autowired不能省略
//可以在一个构造方法中注入多个对象,@Autowired也是可以省略的
private UserComponent userComponent;
@Autowired
public UserController(UserService userService, UserComponent userComponent){
    this.userService=userService;
    this.userComponent = userComponent;
}

注意:

1.setter注入和构造方法注入@Autowried是添加在方法上面的

2.当当前类里面只有一个构造方法的时候,@Autowired 可以省略,当存在多个构造方法时,@Autowired不能省略

3.可以在一个构造方法中注入多个对象,如果当前类里面只有一个构造方法的时候,@Autowired也是可以省略的

4.在Spring中,一个类中可以有多个构造方法,但是只能有一个构造方法前面加了@Autowried,否则报错,加了@Autowried的构造方法才会被执行。

构造方法注入优点:

  • 能注入一个final修饰的属性,因为在构造方法中赋值了

  • 因为构造方法在对象创建时就会执行一次,因此他不存在对象会被随时(调用)修改的情况,所以注入对象不会被修改

  • 因为构造方法是在类创建之初就会执行的方法,依赖是在类的构造方法中的,所以依赖在对象使用前就会被完全初始化。

  • 通用性更好,因为构造方法是Java(JDK)支持的(最底层的框架)

@Resource不支持构造方法注入\color{red}{@Resource不支持构造方法注入}@Resource不支持构造方法注入

不同点2:

出身不同,@Autowried是来自Spring的注解,@Resource是来自jdk的注解

不同点3:@Resource支持的参数比@Autowried

@Resource支持的参数

@Autowried支持的参数

举参数name的例子来说明 当Spring中有多个@Bean注解,叫User的对象,

如果直接用

@Autowired//自动装配
private User user;

则会报错

Spring为了解决这个问题推出了以下方法:

@Autowired
@Qualifier(value = "UserBeans_user1")
private User user;

而使用@Resource,可以直接地区Spring中称为UserBeans_user1的对象,复制到当前类的user上

@Resource(name = "UserBeans_user1")
private User user;

以上就是@Autowired与@Resource在实现对象注入时的区别的详细内容,更多关于@Autowired与@Resource区别的资料请关注脚本之家其它相关文章!

相关文章

  • Java大数据处理的核心技术MapReduce框架

    Java大数据处理的核心技术MapReduce框架

    MapReduce是一种分布式计算框架,适用于大规模的数据处理。它将大数据分成多个小数据块,通过Map和Reduce两个阶段对数据进行处理和分析。MapReduce框架具有可靠、高效、可扩展等特点,已经成为大数据处理的核心技术
    2023-05-05
  • MyBatis实现配置加载的步骤

    MyBatis实现配置加载的步骤

    本文主要介绍了MyBatis实现配置加载的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Mybatis报错mapkey is required问题及解决

    Mybatis报错mapkey is required问题及解决

    这篇文章主要介绍了Mybatis报错mapkey is required问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Spring详细讲解7种事务传播方式

    Spring详细讲解7种事务传播方式

    Spring事务传播机制是指,包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。本文通过示例详细介绍了Spring的事务传播机制,需要的可以参考一下
    2023-01-01
  • Spring component-scan XML配置与@ComponentScan注解配置

    Spring component-scan XML配置与@ComponentScan注解配置

    这篇文章主要介绍了Spring component-scan XML配置与@ComponentScan注解配置,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 带你了解Java数据结构和算法之前缀,中缀和后缀表达式

    带你了解Java数据结构和算法之前缀,中缀和后缀表达式

    这篇文章主要为大家介绍了Java的前缀,中缀和后缀表达式 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • java实现同态加密算法的实例代码

    java实现同态加密算法的实例代码

    这篇文章主要给大家介绍了关于java实现同态加密算法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java如何通过File类方法删除指定文件夹中的全部文件

    Java如何通过File类方法删除指定文件夹中的全部文件

    这篇文章主要给大家介绍了关于Java如何通过File类方法删除指定文件夹中的全部文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java 生成二维码的工具资料整理

    Java 生成二维码的工具资料整理

    本文主要介绍Java 生成二维码的几种方法,这里给大家详细介绍了java生成二维码的三种工具,并附有示例代码供大家参考,开发java 二维码的朋友可以参考下
    2016-08-08
  • idea debug没有force step into的问题解决

    idea debug没有force step into的问题解决

    本文主要介绍了IDEA Debug中ForceStepInto按钮消失的问题及解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10

最新评论