我应该在 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/