JSR-250 与 JSR-330 用于注入应用程序上下文



我看到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

最新更新