我想通过java中的注释注入一些代码。 计划是我有两个方法beginAction()和endAction()。我想注释一个方法,这样在执行方法中的语句之前,将放置beginAction(),在完成执行后,endAction()将自动放入。可能吗。如果是,请建议我该怎么做。
@MyAnnotation
public void myMethod(){
// Statement 1;
// Statement 2;
}
在运行时,应通过注释在方法中注入beginAction()和endAction()。那就是它应该在运行时变得像以下那样。
public void myMethod{
beginAction();
// Statement 1;
// Statement 2;
endAction();
}
答案 0 :(得分:1)
看起来你需要方面。在这种情况下,AspectJ是最受欢迎的库。您可以在此处详细了解:https://eclipse.org/aspectj/docs.php
以下是使用这种方面的例子:
带截取方法的类:
public class YourClass {
public void yourMethod() {
// Method's code
}
}
方面本身:
@Aspect
public class LoggingAspect {
@Around("execution(* your.package.YourClass.yourMethod(..))")
public void logAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Do something before YourClass.yourMethod");
joinPoint.proceed(); //continue on the intercepted method
System.out.println("Do something after YourClass.yourMethod");
}
}
答案 1 :(得分:0)
你不能只使用普通的Java来做到这一点。但是,有一种类似Java的语言可以实现这一点。它被称为Xtend。它编译为Java,而不是字节码,因此它受益于Java编译器所做的所有精彩事情。
它始于Eclipse项目,但现在也可用于IntelliJ。
其众多功能之一是名为" Active Annotations"。它们完全符合您的要求:它们允许您参与代码生成过程,因此您可以根据需要插入beginAction()
和endAction()
方法。
有关Active Annotations的详细信息,请参阅http://www.eclipse.org/xtend/documentation/204_activeannotations.html。