在Java中可以從其註釋中找到方法嗎? 例如:從註釋中查找方法
@Named("Qty")
public getQty()
{
return _quantity;
}
@Named("Qty")
public void setQty(long qty)
{
_quantity = qty;
}
我知道,無論是標註爲「數量」,怎麼可以檢索例如在運行時的setter方法?
在Java中可以從其註釋中找到方法嗎? 例如:從註釋中查找方法
@Named("Qty")
public getQty()
{
return _quantity;
}
@Named("Qty")
public void setQty(long qty)
{
_quantity = qty;
}
我知道,無論是標註爲「數量」,怎麼可以檢索例如在運行時的setter方法?
查找所有使用@Named
註釋的方法與參數Qty
,然後查找名爲getQty
的方法,或從註釋方法列表中檢查getter前綴。
這是昂貴的,首先在類getDeclaredMethods上使用,爲方法獲取其命名註釋,然後檢查方法名稱爲「get [A-Z]」或「is [A-Z]」。最好以其他方式解決問題。
我很樂意提供建議。這個想法是關於「數量」的關鍵字,我想輕鬆地回收吸氣劑和二道回收器。我聽說過一些叫做java bean的屬性,你認爲這可以提供什麼幫助? – delita 2012-03-12 02:38:17
你可以看看JPA,像** eclipseLink **,http://www.vogella.de/articles/JavaPersistenceAPI/article.html。從數據庫到Java類的O/R映射是唯一可比較的應用程序。這在Java bean屬性的類別中有所不同。 – 2012-03-12 02:55:46
您可以使用反射。
使用Class和Method來遍歷這些方法。使用getAnnotation方法來確定方法是否具有註釋。
Named attr = method . getAnnotation (Named . class) ;
if ((attr != null) && (attr . value == "Qty")) ...
使用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方法,但反思還可以幫助你在這裏:
import static org.reflections.ReflectionsUtils.*;
Set<Method> setterMethods = getAll(methods, withPrefix("set"));
就像喬普所說的那樣,這是相當昂貴的。你有任何替代實施?它可能不一定是基於反思的。 – delita 2012-03-12 02:37:05
如果您需要根據註釋參數查找方法,則看不到您的選項。你可以註釋屬性,避免對於本質上是相同的事物有兩個註釋。 – 2012-03-12 02:40:25