如何在带注释的类上生成方法?

时间:2011-06-22 20:08:27

标签: java annotations processor

我想学习并享受注释乐趣。这是我的用例:我有一堆基本上具有相同角色的类:根据正则表达式验证视频URL(1方法)并返回相应的嵌入式HTML(另一种方法)。

事情是验证方法总是一样的。我当然可以使用继承,但我想如果可以创建这样的注释:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.??)
@Inherited
@Documented
public @interface VideoProvider {
        String regex();
        int group() default 1;
}

像那样处理:

//processor class
public boolean process(Set<? extends TypeElement> annotations,
        RoundEnvironment roundEnv) {
    for (TypeElement annotation : annotations) {
        for (Element e :    roundEnv.getElementsAnnotatedWith(annotation)) {
            if (e.getKind().isClass()) {
                //?????
            }
        }
    }
    return false;
}

这个想法是动态更改带注释的类以注入执行验证的方法。 那可行吗?

提前致谢!

罗尔夫

2 个答案:

答案 0 :(得分:2)

查看使用java的Proxy类cglib Enhancer类。这两种解决方案都允许您代理一个类并采用任何方法。

答案 1 :(得分:0)

我认为你做错了---

但是如果你真的想在编译时使用注释处理来实现它,你应该看一下Pluggable Annotation Processing API

这专门用于向编译过程添加注释驱动的扩展,以执行自动添加方法等操作。