当前位置: 首页 > news >正文

@Resource注解的两种注入方式

📌 按类型注入 vs 按名称注入

@Resource 注解中:

  • 默认是按名称注入(如果 name 指定,按名称查找)。
  • 如果没有指定 name,则按类型查找

1️⃣ 按类型注入(默认情况)

如果 @Resource 没有指定 name,Spring 会按照类型匹配注入 同类型的 Bean

示例

假设有两个 Bean
@Component
public class UserRepository {
    public void save() {
        System.out.println("User saved!");
    }
}
@Component
public class OrderRepository {
    public void save() {
        System.out.println("Order saved!");
    }
}
按类型注入
@Service
public class UserService {

    @Resource
    private UserRepository userRepository; // 按类型匹配 UserRepository

    public void saveUser() {
        userRepository.save();
    }
}

Spring 会自动匹配 UserRepository 并注入

注意

  • 如果 UserRepository 有多个 Bean,可能会报错
    NoUniqueBeanDefinitionException: expected single matching bean but found 2
    
  • 解决方案
    • 使用 @Primary 指定默认 Bean
    • @Resource(name="xxx") 强制按名称匹配
    • 改用 @Autowired + @Qualifier

2️⃣ 按名称注入

如果 @Resource(name="beanName") 指定了 name,Spring 优先按名称查找

示例

定义多个相同类型的 Bean
@Component("userRepoA")
public class UserRepositoryA implements UserRepository {
    public void save() {
        System.out.println("User A saved!");
    }
}

@Component("userRepoB")
public class UserRepositoryB implements UserRepository {
    public void save() {
        System.out.println("User B saved!");
    }
}
按名称注入
@Service
public class UserService {

    @Resource(name = "userRepoA")  // 指定按名称匹配 userRepoA
    private UserRepository userRepository;

    public void saveUser() {
        userRepository.save();
    }
}

Spring 只会注入 userRepoA,不会报错


3️⃣ 按类型 vs 按名称总结

方式规则适用场景
按类型@Resource 不写 name,Spring 按类型查找 Bean只有一个同类型的 Bean 时,推荐使用
按名称@Resource(name="beanName") 按名称查找有多个相同类型的 Bean 时,必须指定名称,否则会报错

🚀 什么时候用哪种方式?

如果只有一个 Bean,直接用 @Resource(按类型)
如果有多个 Bean,建议用 @Resource(name="xxx") 指定名称,避免冲突

相关文章:

  • Prometheus使用
  • Java:Arrays类:操作数组的工具类
  • SQLMesh系列教程:SQLMesh虚拟数据环境
  • vue3 setup中访问全局变量还用加this吗。原来在组合式API中,需要用this.$loading。在setup中怎么用
  • 第1章:云原生时代:容器技术的发展历程与核心价值
  • 个人学习编程(3-19) leetcode刷题
  • Python 线程池
  • java-正则表达式-集合-泛型
  • VScode的debug
  • AUTOSAR与arxml的文档解析
  • 【Ratis】ratis-grpc支持零拷贝系列之引入ZeroCopyMessageMarshaller工具类
  • 【6】组合计数学习笔记
  • 2.FastAPI 中的路由与路径操作
  • Python中的字典:深度解析与应用实践
  • 破解验证码新利器:基于百度OCR与captcha-killer-modified插件的免费调用教程
  • 数据驱动进化:AI Agent如何重构手机交互范式?
  • CUDAOpenCV Hessain矩阵计算
  • 虚拟电商-延迟任务系统的微服务改造(二)
  • Linux内核Netfilter使用实战案例分析
  • 利用labelme进行图片标注
  • 首届上海老年学习课程展将在今年10月举办
  • 对话哭泣照被恶意盗用成“高潮针”配图女生:难过又屈辱
  • 中国以“大幅开放市场”回应贸易保护主义
  • 五一期间7名游客接连被困青海荒漠,警方提醒严禁非法穿越
  • 澳大利亚工党可以靠“回避”胜选,但继续执政需要更多勇气
  • 网友建议平顶山请刘昊然任旅游宣传大使,市委:有此设想,正申请经费