如何使用@Inject批注在Java中堆叠自定义注释
我在浏览时多次看到这一点..人们正在使用自己的@Inject
注释来注入EntityManager
如下所示:
@Inject @MyEm EnityManager em;
因为你不能只注入EntityManager
。 你只能用@PersistenceContext
来做。 有没有人知道如何使这项工作(使用自定义注释),因为我没有在网上找到任何信息? 如果可以,请举个例子。
基本上你需要做的是创建一个鉴别器注释并与Producer一起使用它。 这使您可以在Java EE应用程序中的其他bean中简单地@Inject您的实体管理器。 这是一个例子:
@Qualifier @Retention(RUNTIME) @Target(METHOD, FIELD, PARAMETER, TYPE) public interface @MyEm { } public class EntityProducer { @PersistenceContext(unitName = 'MyPU', type = PersistenceContextType.EXTENDED) private EntityManager entityManager; @Produces @MyEm public EntityManager getEntityManager() { return entityManager; } } public class MyDAO { @Inject @MyEm private EntityManager entityManager; }
这被称为“限定符”。 每个CDI教程都应该解释它们。 简而言之:
- 创建自己的注释,并使用
@Qualifier
注释它 - 在实现某个接口的具体类上使用限定符注释,或者在创建实例的生成器方法上使用限定符注释
- 在注入点使用自定义注释来区分界面的两个或更多实现