2011-08-16 76 views
3

CDI(上下文依賴注入)框架包含令人敬畏的類javax.enterprise.util.AnnotationLiteral,它使得創建Annotation實例(對於測試特別有用)非常容易。AnnotationLiteral類的獨立版本?

我想在我自己的庫中使用該util類。但是因爲我的圖書館和CDI有關,所以我不想擁有所有其他的CDI資料。 幸運的是AnnotationLiteral沒有使用除標準java類以外的任何其他類,所以這應該是可以的。

截至目前包含AnnotationLiteral最小的圖書館是官方CDI-API

<dependency> 
    <groupId>javax.enterprise</groupId> 
    <artifactId>cdi-api</artifactId> 
    <version>1.0</version> 
</dependency> 

但是即使我切斷了所有的依賴(Maven的排除),罐子將包含很多其他的CDI-API的和-SPI的東西。

所以我的問題是:是否已經有一些(或多或少官方)(maven)庫只包含util.AnnotationLiteral類,或至少沒有那麼多其他的東西?

+0

+1,好問題。 – Bozho

回答

1

只要您遵守許可證,就可以將source複製到您的項目中。

如果可能的話,我會保留軟件包名稱incase CDI最終會成爲項目依賴項。我改變軟件包的唯一原因是如果您決定修改源代碼,這當然並不意味着您可以刪除許可證。

1

可以在geronimo api中找到Apache許可版本AnnotationLiteral。它看起來不像CDI的其他部分有任何依賴性。如果你不需要它在測試中提供的equals和hashCode實現,你甚至可以直接實現一個註釋接口。這不是很好的風格,但絕對有可能。 CDI需要額外的equals和hashCode實現其Qualifier邏輯。以下是使用jsf ManagedBean註釋的示例:

public static ManagedBean test = new ManagedBean() { 
    @Override 
    public String name() { 
     return "test"; 
    } 

    @Override 
    public boolean eager() { 
     return false; 
    } 

    @Override 
    public Class<? extends Annotation> annotationType() { 
     return ManagedBean.class; 
    } 
}; 
+0

我正在尋找正確的方法來實例化一個註記類,這對我來說是完美的答案。這也給了原始問題的正確答案。 –