![](/img/trans.png)
[英]I am trying use custom annotation in java . But not able to get the annotation in
[英]Java - Not able to get value of Custom Annotation
我有一个这样的自定义注释-
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ControllerAction {
String value();
}
我有一个使用这种注释的类-
public class TestController extends AbstractController {
public TestController () {
super();
}
@ControllerAction("add")
public void addCandidate(){
}
}
超级类看起来像这样-
public abstract class AbstractController {
public AbstractController (){
}
public CustomBean processRequest(ServletAction action, HttpServletRequest request) {
Class<AbstractController > controllerClass = AbstractController.class;
for (Method method : controllerClass.getDeclaredMethods()) {
if (method.isAnnotationPresent(ControllerAction.class)) {
Annotation annotation = (ControllerAction) method.getAnnotation(ControllerAction.class);
if(annotation != null){
if(annotation.value().equals(action.getAction())){
method.invoke(controllerClass.newInstance());
}
}
}
}
return null;
}
}
直接从Servlet调用AbstractController
的processRequest(...)
方法。 processRequest()方法确定servlet动作,并在此基础上适当调用该方法。 例如,如果ServletAction.getAction() == 'add'
,则processRequest()
应该在TestController
自动调用addCandidate()
。 但是我无法获得注释的价值。 annotation.value()
以某种方式在Eclipse中给出了编译错误。 Eclipse没有显示我可以用来获取注释值的任何方法。
我想知道是否有一种获取自定义注释的value()的方法。 我不想用String value()
以外的其他任何方式定义Annotation。 我想知道是否可以通过自定义注释中的String value()
实现我想要的?
任何帮助是极大的赞赏。 谢谢。
您可能需要更改
Annotation annotation = (ControllerAction) method.getAnnotation(ControllerAction.class);
至
ControllerAction annotation = method.getAnnotation(ControllerAction.class);
否则,由于annotation
的类型为Annotation
,因此编译器将无法知道ControllerAction
特定方法。
此外,正如Sharon Ben Asher指出的那样,您应该使用getClass()
而不是AbstractController.class
在运行时获取实际实现的类。 给定当前代码,将仅检查AbstractController
的方法,而不检查实现类的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.