2012-01-07 99 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
  • 註釋它使用限定符註釋你的具體類實現一些接口,或者是創建一個實例製作方法
  • 使用您的自定義註釋在注入點區分兩個或多個接口的實現