2
我有一個註釋,定義爲這樣:我有一個的Restlet ServerResource定義爲這樣無法檢索通過反射從AspectJ的建議私人註釋
public @interface RestletResourceVariable {
String name();
}
:
public class QuestionResource extends ServerResource {
static Logger logger = LoggerFactory.getLogger(QuestionResource.class);
@RestletResourceVariable(name="questionId")
public String questionId;
@Get("json")
public JsonRepresentation doGet() {
logger.info("QuestionResource::doGet()");
return new JsonRepresentation("{ nil };");
}
@Post
public Representation doPost(Representation entity) throws Exception {
logger.info("QuestionResource::doPost:" + entity.getText());
return null;
}
}
這裏是我的方面:
public aspect RestletResourceVariableAspect {
static Logger logger = LoggerFactory.getLogger(RestletResourceVariableAspect.class);
pointcut RESTMethods() :
execution(@org.restlet.resource.Delete * packagename..*(..)) ||
execution(@org.restlet.resource.Get * packagename..*(..)) ||
execution(@org.restlet.resource.Post * packagename..*(..)) ||
execution(@org.restlet.resource.Put * packagename..*(..))
;
before(): RESTMethods() {
Signature sig = thisJoinPoint.getSignature();
Object target = thisJoinPoint.getTarget();
Class<?> c = target.getClass();
Class<?> cdecl = sig.getDeclaringType();
logger.info("Class name: {} cdecl {}", c.getName(), cdecl.getName());
logger.info("Sig: {} in class {}", sig.getName(),sig.getDeclaringType().getName());
Field[] fields = cdecl.getDeclaredFields() ;
for (Field field : fields) {
logger.info("Field name: {}", field.getName());
Annotation[] annotations = field.getDeclaredAnnotations();
logger.info("Annotations {} length {}", annotations, Integer.toString(annotations.length));
for(Annotation annotation : annotations){
if(annotation instanceof RestletResourceVariable){
RestletResourceVariable myAnnotation = (RestletResourceVariable) annotation;
System.out.println("name: " + myAnnotation.name());
}
}
}
}
}
我得到輸出,像這樣:
16:22:11.656 [[email protected]] INFO RestletResourceVariableAspect - Class name: QuestionResource cdecl QuestionResource
16:22:11.656 [[email protected]] INFO RestletResourceVariableAspect - Sig: doGet in class QuestionResource
16:22:11.656 [[email protected]] INFO RestletResourceVariableAspect - Field name: logger
16:22:11.656 [[email protected]] INFO RestletResourceVariableAspect - Annotations [] length 0
16:22:11.656 [[email protected]] INFO RestletResourceVariableAspect - Field name: questionId
16:22:11.656 [[email protected]] INFO RestletResourceVariableAspect - Annotations [] length 0
16:22:11.656 [[email protected]] INFO RestletResourceVariableAspect - Field name: ajc$tjp_0
16:22:11.656 [[email protected]] INFO RestletResourceVariableAspect - Annotations [] length 0
16:22:11.656 [[email protected]] INFO RestletResourceVariableAspect - Field name: ajc$tjp_1
16:22:11.656 [[email protected]] INFO RestletResourceVariableAspect - Annotations [] length 0
16:22:11.656 [[email protected]] INFO QuestionResource - QuestionResource::doGet()
任何指導我做錯了什麼?我想找到標有註釋的字段,以便我可以根據請求填充它們。
你最真棒!謝謝! – 2011-06-18 00:19:12