AnnotationLiteral类的独立版本?

时间:2011-08-16 18:48:26

标签: java annotations cdi

CDI(上下文依赖注入)框架包含了令人敬畏的类javax.enterprise.util.AnnotationLiteral,它使创建注释实例变得非常容易(特别适用于测试)。

我想在我自己的库中使用该util类。但是因为我的图书馆已经注意到了CDI,我不想拥有所有其他CDI的东西。 幸运的是,AnnotationLiteral不使用除标准java类之外的任何其他类,因此这应该是可能的。

到目前为止,包含AnnotationLiteral的最小库是官方CDI-API

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

但即使我切断了所有依赖项(通过maven排除),jar也会包含很多其他CDI-API和-SPI内容。

所以我的问题是:是否已经有一些(或多或少官方)(maven)库只包含util.AnnotationLiteral类,或者至少没有其他东西?

2 个答案:

答案 0 :(得分:1)

只要您遵守许可,就可以将source复制到项目中。

如果可以,我会保留包名称,因为CDI最终会成为项目依赖项。我更改软件包的唯一原因是您决定修改源代码,这当然并不意味着您可以删除许可证。

答案 1 :(得分:1)

可以在geronimo api中找到AnnotationLiteral的Apache许可版本。看起来它与CDI的其他部分没有任何依赖关系。如果您不需要在测试中提供的equals和hashCode实现,您甚至可以直接实现注释接口。这不是很好的风格,但绝对可能。 CDI需要额外的equals和hashCode实现其限定符逻辑。以下是使用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;
    }  
};