2013-04-24 24 views
0

這兩個替代方法之間是否有區別......它們是否可以互換使用?自定義註釋vs使用JEE6中的@named

(A)創建自定義註釋,以便@注入可被用來代替一@PersistenceContext DAO內,如圖中的答案爲 - how-to-stack-custom-annotation-in-java-with-inject-annotation

(B)使用@Named( 「YOURNAME」)來限定生產者,如下面的代碼示例。

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

它們是可互換的,但你應該使用(A)。

@Named註釋主要用於能夠通過表達式語言(EL)來訪問對象,例如,在JSF視圖中。

問題是,解決方案是通過字符串完成的,因此既不是類型安全的,通常也不會被IDE中的重構自動覆蓋。

CDI specification指出,如果不用於集成遺留代碼,它不應該用於合格注入點。

這裏有一個很好的關於這個話題的article