2011-08-16 79 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

我正在寻找正确的方法来实例化一个注记类,这对我来说是完美的答案。这也给了原始问题的正确答案。 –