我发现JSR-330 @Inject注释没有将ApplicationContext填充到我的bean中。使用JSR-250 @Resource注释时,它会被正确注入。是的,我知道我可以让MyClass实现ApplicationContextAware,但想知道为什么@Resource可以工作,但是@Inject没有。我正在使用spring-context版本4.1.6.RELEASE和java 8
这有效:
@Named
public class MyClass {
@Resource
public ApplicationContext applicationContext;
...
}
这将ApplicationContext设为null
@Named
public class MyClass {
@Inject
public ApplicationContext applicationContext;
...
}
答案 0 :(得分:0)
有很多混乱,因为JSR-330(依赖注入为 由Rod Johnson(SpringSource)和Bob Lee(谷歌公司)领导的Java) 成为Java EE 6的一部分.JSR-330非常简单。它附带 从包中拥有几个注释:javax.inject。包裹 包含以下元素:注入,限定符,范围,单例, 命名和提供者。它是基本依赖的定义 注入语义。
JSR-299(Java上下文和依赖注入),与Gavin King一样 铅,使用JSR-330作为基础,并显着增强它 模块化,交叉切割方面(装饰器,拦截器), 自定义范围或类型安全注入功能。 JSR-299是分层的 在JSR-330之上。
看到内置限定符@Named不是很有趣 建议使用,仅用于与遗留代码集成:
“不建议使用@Named作为注入点限定符, 除了与使用的遗留代码集成的情况 用于标识bean的基于字符串的名称。“[3.11限定符@Named at 注射点,JSR-299规格,第32页
来源http://www.adam-bien.com/roller/abien/entry/what_is_the_relation_between