0

这两种选择有什么区别……它们可以互换使用吗?

(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;
    ..
}
4

1 回答 1

0

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

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

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

CDI 规范指出,如果不用于集成遗留代码,则不应将其用于限定注入点。

这是一篇关于这个主题的好文章。

于 2013-04-25T06:36:43.067 回答