2012-01-07 97 views
2

我浏览时看到了这几次..人都在使用@Inject标注自己注入EntityManager这样的:如何栈定义注解在Java中使用@Inject注解

@Inject @MyEm EnityManager em; 

,因为你不能只是注入EntityManager。您只能使用@PersistenceContext。有没有人知道如何做这个工作(使用自定义注释),因为我没有在网上找到任何信息?请举个例子,如果可以的话。

回答

3

基本上你需要做的是创建一个鉴别符注释并将其与生产者结合使用。这使您可以在Java EE应用程序中的其他bean中简单@注入实体管理器。这里是一个例子:

@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; 
} 
2

这被称为“限定符”。每个CDI教程都应该解释它们。总之:

  • 创建自己的注释,并与@Qualifier
  • 注释它使用限定符注释你的具体类实现一些接口,或者是创建一个实例制作方法
  • 使用您的自定义注释在注入点区分两个或多个接口的实现