@Resource注解是什么作用,和@bean区别是什么?

2023-12-17

@Resource 注解就像是 Java 开发的快递小哥,专门用来送依赖关系到你的代码门口。它的主要工作就是帮你实现依赖注入,把其他组件(比如类、对象、bean,啥的)送到你需要的地方。

具体来说:

  1. 依赖注入: @Resource 负责把其他组件注入到你标记的字段、方法或构造函数里。就像是在给你的类里面塞积木,让你的代码更好玩、更有趣。

  2. 指定注入的对象: 你可以通过 name 属性指定你要送进来的依赖的名字,就像在点外卖时指定你要的菜名一样。

  3. 按名称匹配: 如果你没指定名字,它会按照字段或方法的名字去找对应的依赖。就像找猫奴一样,你叫“喵喵”,它就找个“喵喵”的对象送过来。

  4. 按类型匹配: 如果你连名字都不想管,直接放 @Resource ,它就会根据类型找个对应的依赖。当然,如果有多个同类型的对象,你可以加点儿料,比如 @Qualifier 注解,指定具体哪个。

其实@Resource 就是你的 Java 代码中的“送货小哥”,让依赖关系更清晰,代码更整洁。有了它,你的代码就像是住进了豪华别墅,各种服务都送上门啦~

到这里会有人提出疑问了。它和@bean的区别是什么呢?

@Bean @Resource 是两种不同的方式来处理依赖注入的。具体来说:

  • @Bean 注解: 你在配置类里用 @Bean 注解方法,Spring 会调用这个方法,把返回的对象交给容器,然后你就可以通过 @Autowired 或者 ApplicationContext 来获取这个 Bean。

    @Configuration public class MyConfig { @Bean public MyService myService() { return new MyService(); } }

  • @Resource 注解: 用在字段、方法或构造函数上,告诉 Spring 在容器中找一个匹配的对象注入进来。

    public class MyService { @Resource private MyDao myDao; // 其他代码... }

所以,两者都可以实现依赖注入,你可以根据自己的喜好和项目需要选择使用哪一种方式。有时候, @Bean 更适合在配置类中定义一些复杂的 Bean,而 @Resource 更适合在业务类中注入简单的依赖。

如果你在普通的业务类中使用 @Bean 注解,Spring 是不会识别它的,也就不能正确地将其注册为 Bean。通常在业务类中使用 @Autowired 或者 @Resource 这样的注解来进行依赖注入。

所以, @Bean 注解主要用在配置类的方法上,帮助你将对象注册到 Spring 容器中。

拓展

  • @Autowired 是 Spring 框架提供的注解,用于实现依赖注入。它是 Spring 比较常用且强大的注解之一。

  • 按类型注入: 通过类型进行匹配,如果容器中存在多个相同类型的 Bean,可以结合 @Qualifier 注解指定具体的 Bean。

  • 支持构造函数注入: 可以用在构造函数上,通过构造函数注入依赖。

如果你在一个纯粹的 Spring 项目中,或者你对容器的选择没有太多限制,建议使用 @Autowired 它是 Spring 的一部分,更灵活且功能强大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Resource注解是什么作用,和@bean区别是什么? 的相关文章

  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • 如何在 Java 中向时间戳添加/减去时区偏移量?

    我正在使用 JDK 8 并且玩过ZonedDateTime and Timestamp很多 但我仍然无法解决我面临的问题 假设我得到了格式化的Timestamp在格林威治标准时间 UTC 我的服务器位于某处 假设它设置为Asia Calcu
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • Java 中如何将 char 转换为 int? [复制]

    这个问题在这里已经有答案了 我是Java编程新手 我有例如 char x 9 我需要得到撇号中的数字 即数字 9 本身 我尝试执行以下操作 char x 9 int y int x 但没有成功 那么我应该怎么做才能得到撇号中的数字呢 ASC
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 如何仅从 Firestore 获取最新更新的数据?

    在 Firestore 上发现任何更改时始终获取整个文档 如何只获取最近更新的数据 这是我的数据 我需要在第一次加载时在聊天中按对象顺序 例如 2018 09 17 30 40 msg和sendby 并且如果数据更新则仅获取新的msg和se
  • 从jar中获取资源

    我有包含文件的 jar myJar res endingRule txt myJar wordcalculator merger Marge class 在 Marge java 中我有代码 private static final Str
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • 部署 .war 时出现 Glassfish 服务器错误:部署期间发生错误:准备应用程序时出现异常:资源无效

    我正在使用以下内容 NetBeans IDE 7 3 内部版本 201306052037 爪哇 1 7 0 17 Java HotSpot TM 64 位服务器虚拟机 23 7 b01 NetBeans 集成 GlassFish Serve
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack
  • Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

    我正在使用 spring 应用程序 有时会使用 PostConstruct用于代码和测试中的设置 看来注释将被排除在外Java 11 https www baeldung com spring postconstruct predestro
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp

随机推荐