自定义注释与在JEE6中使用@Named

时间:2013-04-24 16:57:56

标签: annotations java-ee-6

这两种选择之间是否有任何区别......它们是否可以互换使用?

(A)创建自定义注释,以便在DAO中使用@Inject代替@PersistenceContext,如-how-to-stack-custom-annotation-in-java-with-inject-annotation的答案所示

(B)使用@Named(“yourName”)来限定Producer,例如以下代码示例。

public class Resources {
    /**
     * EntityManager's persistence context is defined here so the @Inject annotation may be used in referencing classes.
     */
    @Produces
    @Named("MyEm")
    @PersistenceContext(unitName = "jboss.managed")
    private EntityManager   em;
}


@Stateless
public class FiletracksentHome {
     ..
    @Inject
    @Named("MyEm")
    private EntityManager       entityManager;
    ..
}

1 个答案:

答案 0 :(得分:0)

它们是可互换的,但你应该使用(A)。

@Named注释主要用于能够通过表达式语言(EL)访问对象,例如,在JSF视图中。

问题是,解析是通过String完成的,因此既不是类型安全的,也不会被IDE中的重构自动覆盖。

CDI specification表示如果不用于整合遗留代码,则不应将其用于限定注入点。

关于这个主题,这是一个很好的article