从注释中查找方法

时间:2012-03-12 02:22:49

标签: java reflection

在Java中可以从注释中找到方法吗? 例如:

@Named("Qty") 
public getQty()
{
    return _quantity;
}

@Named("Qty")
public void setQty(long qty)
{
    _quantity = qty;
}

我知道两者都注释为“Qty”,如何在运行时检索setter方法?

4 个答案:

答案 0 :(得分:0)

使用参数@Named查找使用Qty注释的所有方法,然后查找名为getQty的方法,或者从带注释的方法列表中检查getter前缀。< / p>

答案 1 :(得分:0)

首先在类getDeclaredMethods上使用它是昂贵的,因为方法得到它的命名注释,然后检查方法名称“get [A-Z]”或“是[A-Z]”。更好地以其他方式解决问题。

答案 2 :(得分:0)

您可以使用反射。

使用ClassMethod迭代这些方法。使用getAnnotation方法确定方法是否具有注释。

Named attr = method . getAnnotation ( Named . class ) ;
if ( ( attr != null ) && ( attr . value == "Qty" ) ) ...

答案 3 :(得分:0)

使用Reflections库,您可以执行以下操作:

Reflections reflections = new Reflections("my.package", new MethodAnnotationsScanner());
Set<Method> namedMethods = reflections.getMethodsAnnotatedWith(Names.class);
//or even
Set<Method> qtyMethods = reflections.getMethodsAnnotatedWith(
        new Named() {
            public String value() { return "Qty"; } 
            public Class<? extends Annotation> annotationType() { return Named.class; }
        });

然后,使用传统的java反射很容易得到setter方法,虽然Reflection也可以帮助你:

import static org.reflections.ReflectionsUtils.*;
Set<Method> setterMethods = getAll(methods, withPrefix("set"));