java - @Resource 与 @Autowired

标签 java spring dependency-injection annotations autowired

我应该在 DI 中使用哪个注释,@Resource (jsr250) 或 @Autowired(Spring 专用)?

我过去都成功使用过 @Resource(name="blah")@Autowired @Qualifier("blah")

我的直觉是坚持使用 @Resource 标签,因为它已被 jsr 人认可。
有人对此有强烈的想法吗?

最佳答案

@Autowired(或 @Inject)和 @Resource 都同样有效。但存在概念上的差异或含义上的差异

  • @Resource 意味着给我一个按名称知道的资源。名称是从带注释的 setter 或字段的名称中提取的,或者是从 name-Parameter 中提取的。
  • @Inject@Autowired 尝试按类型连接合适的其他组件

所以,基本上这是两个截然不同的概念。不幸的是,@Resource 的 Spring-Implementation 有一个内置的回退,当按名称解析失败时会启动。在这种情况下,它会按类型回退到 @Autowired-kind 分辨率。虽然这种回退很方便,但恕我直言,它会引起很多困惑,因为人们没有意识到概念上的差异,并且倾向于使用 @Resource 进行基于类型的 Autowiring 。

关于java - @Resource 与 @Autowired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4093504/

相关文章:

java - Velocity 模板引擎如何用于 Java Web 应用程序中的 View ?

java - 在 Pane 仍在运行的情况下更改发送到 JOptionPane 的 JPanel 的布局

java - Spring Data JPA BigList 插入

java - Spring 自动接线

c# - 具有相同 DI 容器的多个主机

java - 在 headless (headless)环境中获取键盘事件

java - 如何使用 bat 文件在 Windows 服务器上卸载 java?

spring - Spring Boot编译的jar文件在哪里

javascript - Aurelia 依赖注入(inject)装饰器不工作

c# - 简单注入(inject)器无法在 Web API Controller 中注入(inject)依赖项