notebook notebook
首页
  • 计算机网络
  • 计算机系统
  • 数据结构与算法
  • 计算机专业课
  • 设计模式
  • 前端 (opens new window)
  • Java 开发
  • Python 开发
  • Golang 开发
  • Git
  • 软件设计与架构
  • 大数据与分布式系统
  • 常见开发工具

    • Nginx
  • 爬虫
  • Python 数据分析
  • 数据仓库
  • 中间件

    • MySQL
    • Redis
    • Elasticsearch
    • Kafka
  • 深度学习
  • 机器学习
  • 知识图谱
  • 图神经网络
  • 应用安全
  • 渗透测试
  • Linux
  • 云原生
面试
  • 收藏
  • paper 好句
GitHub (opens new window)

学习笔记

啦啦啦,向太阳~
首页
  • 计算机网络
  • 计算机系统
  • 数据结构与算法
  • 计算机专业课
  • 设计模式
  • 前端 (opens new window)
  • Java 开发
  • Python 开发
  • Golang 开发
  • Git
  • 软件设计与架构
  • 大数据与分布式系统
  • 常见开发工具

    • Nginx
  • 爬虫
  • Python 数据分析
  • 数据仓库
  • 中间件

    • MySQL
    • Redis
    • Elasticsearch
    • Kafka
  • 深度学习
  • 机器学习
  • 知识图谱
  • 图神经网络
  • 应用安全
  • 渗透测试
  • Linux
  • 云原生
面试
  • 收藏
  • paper 好句
GitHub (opens new window)
  • 面试索引
  • Java 面试

    • 如何设计一个抢红包算法
    • Autowired 与 Resource 注解的区别
      • 1. Autowired 注解
      • 2. Resource 注解
      • Summary
    • 秒杀系统设计方案
    • IO 多路复用
  • 面试
  • Java 面试
yubin
2022-12-28
目录

Autowired 与 Resource 注解的区别

参考视频 @Autowired和@Resource注解的区别 (opens new window)

省流

  • @Autowired 默认 by type,也可以搭配 @Qualifier 来指定 by name;
  • @Resource 默认 by name,找不到则 by type,他也可以显式指定 name 或 type。

# 1. Autowired 注解

@Autowired 为 Spring 提供的注解,采取的策略为按照类型注入:

public class UserService {
    @Autowired
    private UserDao userDao;
}
1
2
3
4

如上代码所示,这样装配回去 Spring 容器中找到类型为 UserDao 的类,然后将其注入进来。

但这样会产生一个问题:当一个类型有多个 bean 的时候,会造成无法选择具体注入哪一个 bean,这时我们就需要配合着 @Qualifier 使用。

@Qualifier 搭配 name 来告诉 Spring 具体去装配哪个 bean:

public class UserService {
    @Autowired
    @Qualifier(name="userDao1")
    private UserDao userDao;
}
1
2
3
4
5

# 2. Resource 注解

@Resource 注解由 JavaEE 提供,它默认按照 name 自动注入:

public class UserService {
    @Resource
    private UserDao userDao;
}
1
2
3
4

如上的代码会注入一个 name 为 userDao 的 bean,如果匹配不到的话就回退为一个按照 type 来匹配,再匹配不到就抛出异常。

另外,@Resource 可以显式指定 type 或 name,即 @Resource(name = "userDao") 或 @Resource(type = "TeacherDao"),当然也可以同时指定 type 和 name 来组合使用。当显式指定但又匹配不到时,会抛出异常。

# Summary

Spring 属于第三方的,JavaEE 是 Java 自己的东西,使用 @Resource 可以减少代码和 Spring 之间的耦合。

两者都可以写在 field 和 setter method 上,如果写在 field 上就不需要再写 setter 了。

无法唯一匹配时会抛出异常。

编辑 (opens new window)
上次更新: 2022/12/28, 16:48:24
如何设计一个抢红包算法
秒杀系统设计方案

← 如何设计一个抢红包算法 秒杀系统设计方案→

最近更新
01
Deep Reinforcement Learning
10-03
02
误删数据后怎么办
04-06
03
MySQL 一主多从
03-22
更多文章>
Theme by Vdoing | Copyright © 2021-2024 yubincloud | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×