自动注入@resource和@autowired的区别

标题自动注入@resource和@autowired的区别

@Resource : 按名称进行注入

来源:JSR-250标准注解,属于Java EE的一部分。

默认行为:按名称(byName)注入。如果找不到指定名称的Bean,则按类型(byType)注入。

使用场景:

当希望通过名称注入Bean时。

当希望代码与Spring框架解耦,使用标准注解时。

按名称注入适合以下场景:

1.容器中存在多个相同类型的Bean。

java 复制代码
public interface UserService {
    void execute();
}

@Component("userServiceA") // 指定Bean的名称为userServiceA
public class UserServiceA implements UserService {
    @Override
    public void execute() {
        System.out.println("UserServiceA is running");
    }
}

@Component("userServiceB") // 指定Bean的名称为userServiceB
public class UserServiceB implements UserService {
    @Override
    public void execute() {
        System.out.println("UserServiceB is running");
    }
}

例如,我的UserService有两种不一样的实现execute的方法,这样我在调用UserService的时候,就需要@Resource(name = "userServiceA")一下,明确对应的UserService具体是哪一个。

2.需要明确指定Bean的名称。

3.使用第三方库或框架时,Bean名称固定。

4.希望代码与Spring框架解耦。

@Autowired : 按类型进行注入

来源:Spring框架自带的注解。

默认行为:按类型(byType)注入。如果找到多个匹配的Bean,会按名称(byName)注入。

使用场景:1.希望通过类型注入Bean时。2.希望结合@Qualifier注解来指定具体的Bean名称时。

按类型注入适合以下场景:

1.Bean类型唯一

2.不关心Bean的具体名称。

3.使用接口或抽象类。

4.结合@Primary或@Qualifier注解。

5.动态代理场景。

6.框架或库的设计。

7.单元测试。

Tips(个人理解,若有错误请指出)

1.在spring框架中,如果容器中仅有一种类型的Bean,即你的Bean构造体没有利用@Component来实现多种方法时,那这时候两种都可以使用;

  1. @Autowired 使用的spring框架,而@Resource使用的是java框架,因此正常情况下,可以优先考虑使用@Resource。
相关推荐
tsyjjOvO11 分钟前
JDBC(Java Database Connectivity)
java·数据库
qq_124987075315 分钟前
基于springboot的尿毒症健康管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·spring·毕业设计·计算机毕业设计
编程彩机18 分钟前
互联网大厂Java面试:从Spring Boot到微服务优化场景解析
spring boot·分布式事务·微服务架构·java面试·技术解析
猿小羽40 分钟前
Flyway + Spring Boot:实现数据库迁移的最佳实践
spring boot·编程·flyway·最佳实践·数据库迁移
黎子越1 小时前
python相关练习
java·前端·python
电商API&Tina1 小时前
电商数据采集 API 接口 全维度解析(技术 + 商业 + 合规)
java·大数据·开发语言·数据库·人工智能·json
liwulin05061 小时前
【JSON】使用com.fasterxml.jackson解析json字符串
java·数据库·json
what丶k1 小时前
深度解析:以Kafka为例,消息队列消费幂等性的实现方案与生产实践
java·数据结构·kafka
星火开发设计1 小时前
C++ 输入输出流:cin 与 cout 的基础用法
java·开发语言·c++·学习·算法·编程·知识
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于Springboot的酒店住宿信息管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端