ams*_*ams 106 java spring dependency-injection java-ee-6
我试图理解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特定行为.
我的问题是:
@Named和之间有什么区别@Qualifier@Component春天?更新1有一个很好的解释,@Named并@Qualifier在尼斯文章@Named和@Qualifier http://java.dzone.com/articles/java-ee6-cdi-named-components感谢@xmedeko链接到它下面的评论.
sbr*_*ges 78
使用@Named来区分在同一范围内绑定的相同类型的不同对象.
@Named("maxWaitTime")
public long maxWaitTimeMs;
@Named("minWaitTime")
public long minWaitTimeMs;
Run Code Online (Sandbox Code Playgroud)
如果没有@Named限定符,注入器将不知道绑定到哪个变量的长度.
如果要创建类似@Named的注释,请在创建时使用@Qualifier注释.如果你看@Named,它本身就是用@Qualifier注释的.
小智 53
@Inject而不是Spring @Autowired注入一个bean.
@Named而不是Spring @Component来声明一个bean.
那些JSR-330标准注释的扫描和检索方式与Spring注释相同(只要以下jar内容在您的类路径中)
关于#2,根据JSR-330规范:
此包提供了启用可移植类的依赖项注入注释,但它将外部依赖项配置留给了注入器实现.
因此,由提供者决定哪些对象可用于注入.在Spring的情况下,它都是Spring bean.当使用AnnotationConfigApplicationContext时,任何使用JSR-330注释注释的类都会自动添加为Spring bean.
@Named 注释的主要作用是定义一个 bean,用于解析应用程序中的 EL 语句,通常是通过 JSF EL 解析器。可以使用名称执行注入,但这并不是 CDI 中注入的工作方式,因为 CDI 为我们提供了一种更丰富的方式来表达注入点和要注入其中的 bean。
| 归档时间: |
|
| 查看次数: |
131395 次 |
| 最近记录: |