Spring中@Autowired和@Resource注解相同点和不同点

 更新时间:2024年01月02日 11:05:17   投稿:mrr  
这篇文章主要介绍了Spring中@Autowired和@Resource注解相同点和不同点,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

相同点

  • 都可以实现依赖注入,通过注解将需要的Bean自动注入到目标类中。
  • 都可以用于注入任意类型的Bean,包括类、接口、原始类型、数组等。
  • 都支持通过名称、类型匹配进行注入(@Autowired 注解默认按照类型匹配,而 @Resource 注解默认按照名称匹配)
@Autowired
private Bean beanA;
@Resource
private Bean beanB;

在Spring容器中这两个注解功能基本是等价的,都可以将bean注入到对应的字段中。

不同点

虽然功能上看起来基本相同还是存在区别的下面从几个不同方面分析

1.来源不同。

@Autowired 是 Spring 框架提供的注解。

@Resource 是 JavaEE(现在的 JakartaEE)规范中定义的注解。

2.包含的属性不同

@Autowired 只包含一个参数:required,表示是否开启自动注入,默认是true。

@Resource 包含七个参数,其中最重要的两个参数是:name 和 type。

3.匹配方式(装配顺序)不同。

@Autowired 默认先按照类型进行自动装配,再是根据名称的方式。意思就是先在Spring容器中找以Bean为类型的Bean实例,如果找不到或者找到多个bean,则会进一步通过字段名称来找。当有多个同类型的 Bean 存在时,也可以通过 @Qualifier 注解指定具体的 Bean。

@Component
public class UserService {
    @Autowired
    @Qualifier("userRepository")//如果有多个同类型的Bean,可以使用@Qualifier注解指定具体的Bean
    private UserRepository userRepository;
    // ...
}

@Resource 和@Autowired恰好相反,先是按照名称方式,然后再是按照类型方式;当然,我们也可以通过注解中的参数显示指定通过哪种方式。如果有多个同名的Bean,可以使用@Resource注解的name属性指定具体的Bean

默认使用

@Component
public class UserService {
    @Resource//不指定任何属性
    private UserRepository userRepository;
    // ...
}

指定name

@Component
public class UserService {
    @Resource(name = "userRepository")//使用name属性指定具体的Bean
    private UserRepository userRepository;
    // ...
}

指定type

@Component
public class UserService {
    @Resource(type = UserRepository.class)//使用type属性指定Bean类型
    private UserRepository userRepository;
    // ...
}

指定name和type

@Component
public class UserService {
    @Resource(type = "UserRepository.class",name = "userRepository")//使用type属性指定Bean类型,name指定Bean名称
    private UserRepository userRepository;
    // ...
}

4.支持的注入对象类型不同

@Autowired 可以注入任何类型的对象,只要 Spring 容器中存在该类型的 Bean。

@Resource 注解可以用于注入 JNDI 名称(JNDI名称可以是任何字符串,但通常使用具有描述性的名称来标识资源。在应用程序中,可以使用JNDI名称来查找和绑定对象)或者默认按照名称匹配的 Bean

5.应用地方不同

@Autowired能够用在:构造器、方法、参数、成员变量和注解上

@Resource能用在:类、成员变量和方法上。

到此这篇关于Spring中@Autowired和@Resource注解异同点的文章就介绍到这了,更多相关Spring @Autowired和@Resource注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于spring @Cacheable 注解的spel表达式解析执行逻辑

    基于spring @Cacheable 注解的spel表达式解析执行逻辑

    这篇文章主要介绍了spring @Cacheable 注解的spel表达式解析执行逻辑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • SpringBoot加载bean的八种方式总结

    SpringBoot加载bean的八种方式总结

    springboot难免要用到bean,但这些bean如何导入,对于初学者时间头疼的事,下面这篇文章主要给大家介绍了关于SpringBoot加载bean的八种方式,需要的朋友可以参考下
    2022-10-10
  • spring-boot报错javax.servlet.http不存在的问题解决

    spring-boot报错javax.servlet.http不存在的问题解决

    当springboot项目从2.7.x的升级到3.0.x的时候,会遇到javax.servlet.http不存在,本文就来介绍一下这个问题的解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • java算法实现预测双色球中奖号码

    java算法实现预测双色球中奖号码

    这篇文章主要介绍了java算法实现预测双色球中奖号码的相关资料,需要的朋友可以参考下
    2015-12-12
  • Java Stream流零基础教程

    Java Stream流零基础教程

    Java8的另一大亮点Stream,它与java.io包里的InputStream和OutputStream是完全不同的概念,下面这篇文章主要给大家介绍了关于Java8中Stream详细使用方法的相关资料,需要的朋友可以参考下
    2022-11-11
  • java中-jar 与nohup的对比

    java中-jar 与nohup的对比

    这篇文章主要介绍了java中 -jar 与nohup的对比的相关资料,需要的朋友可以参考下
    2017-05-05
  • Android开发中Socket通信的基本实现方法讲解

    Android开发中Socket通信的基本实现方法讲解

    这篇文章主要介绍了Android开发中Socket通信的基本实现方法讲解,是安卓上移动互联网程序开发的基础,需要的朋友可以参考下
    2015-12-12
  • IDEA如何实现显示类的所有方法

    IDEA如何实现显示类的所有方法

    这篇文章主要介绍了IDEA如何显示类的所有方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • java compiler没有1.8怎么解决

    java compiler没有1.8怎么解决

    这篇文章主要介绍了java compiler没有1.8的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • Java中多线程的ABA场景问题分析

    Java中多线程的ABA场景问题分析

    这篇文章主要为大家介绍了Java中多线程的ABA场景问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论