什么是javax.inject.named注释应该用于?

我想了解javax.inject包,我不清楚javax.inject.Named注释应该用于什么。 Javadoc没有解释它背后的想法。

Javadoc位于http://download.oracle.com/javaee/6/api/javax/inject/Named.html

我正在使用Spring 3.0来编写一些示例程序,通过将@Named放在一个bean上,似乎将它添加到bean工厂,但Javadoc描述是如此的轻,我不知道这是标准行为还是Spring特定的行为。

我的问题是:

  1. @Named@Qualifier什么区别?
  2. 你应该如何告诉运行系统一个类应该在其他类中注入什么注释呢? 在Spring中相当于@Component

更新1有一个关于@Named@Qualifier关于@Named@Qualifier http://java.dzone.com/articles/java-ee6-cdi-named-components的精彩解释,谢谢@xmedeko链接到它下面的评论。

使用@Named来区分在同一范围内绑定的同一types的不同对象。

 @Named("maxWaitTime") public long maxWaitTimeMs; @Named("minWaitTime") public long minWaitTimeMs; 

如果没有@Name限定符,注入器将不知道要绑定哪个variables。

如果您要创build类似@Named的注释,请在创build批注时使用@Qualifier批注。 如果你看@Named,它本身是用@Qualifier注释的。

@Inject而不是Spring的@Autowired注入一个bean。
@Name而不是Spring的@Component来声明一个bean。
这些JSR-330标准注释以Spring注释的相同方式进行扫描和检索(只要以下jar包含在classpath中)

关于#2,根据JSR-330规格:

这个软件包提供了dependency injection注释来启用可移植类,但是它将外部依赖configuration留给注入器实现。

所以决定哪些对象可用于注入取决于提供者。 在spring的情况下,都是春豆。 当使用AnnotationConfigApplicationContext时,任何使用JSR-330批注注释的类都会自动添加为Spring bean。

@Named注释的主要作用是为了在应用程序中parsingEL语句,通常是通过JSF ELparsing器来定义bean。 注射可以通过使用名称来执行,但这不是CDI注射的工作原理,因为CDI为我们提供了一种更加丰富的方式来expression注射点和注入的豆类。