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

时间:2016-02-08 20:32:02

标签: java spring jsr330 jsr250

我发现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;

  ...
}

1 个答案:

答案 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