这两种选择之间是否有任何区别......它们是否可以互换使用?
(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;
..
}
答案 0 :(得分:0)
它们是可互换的,但你应该使用(A)。
@Named
注释主要用于能够通过表达式语言(EL)访问对象,例如,在JSF视图中。
问题是,解析是通过String完成的,因此既不是类型安全的,也不会被IDE中的重构自动覆盖。
CDI specification表示如果不用于整合遗留代码,则不应将其用于限定注入点。
关于这个主题,这是一个很好的article。