我看到JSR-330@Inject注释没有将应用程序上下文填充到我的bean中的问题。当使用JSR-250@Resource注释时,它会被正确注入。是的,我知道我可以让MyClass实现ApplicationContextAware,但想知道为什么@Resource有效,但@Inject没有。我正在使用 spring-context 版本 4.1.6.RELEASE 和 java 8
这有效:
@Named
public class MyClass {
@Resource
public ApplicationContext applicationContext;
...
}
这已将应用程序上下文作为空
@Named
public class MyClass {
@Inject
public ApplicationContext applicationContext;
...
}
有很多混乱,因为JSR-330(依赖注入 Java(由Rod Johnson(SpringSource(和Bob Lee(Google Inc.(领导。 成为Java EE 6的一部分。JSR-330非常简单。它带有 拥有软件包中的一些注释:javax.inject。包装 包含以下元素:注入、限定符、作用域、单例、 命名和提供程序。它是基本依赖关系的定义 注入语义。
JSR-299(Java Contexts and Dependency Injection(,Gavin King 饰演 领导,使用 JSR-330 作为基础,并通过 模块化,横切方面(装饰器,拦截器(, 自定义范围或类型安全注入功能。JSR-299 是分层的 在 JSR-330 之上。
有趣的是,内置限定符@Named不是 建议并且应仅用于与旧代码集成:
"不建议使用@Named作为注射点限定符, 除非与使用 基于字符串的名称来标识 bean。[3.11 限定词@Named 注入点,JSR-299 规范,第 32 页]
来源 http://www.adam-bien.com/roller/abien/entry/what_is_the_relation_between