Kee*_*tah 6 eclipse aspectj eclipse-plugin
我试图在eclipse 4.4.0(Luna)中使用aspectJ.Y找不到适合这个版本的eclipse的任何ajdt插件.
无论如何我认为aspectj应该工作,所以我将aspectj jar放在我的webApp的lib目录中,并创建这个Aspect类:
@Aspect
public class LoggerAspect {
@Before("(execution(* *.*(..))")
public void intercept(JoinPoint jp) {
System.out.print("before");
}
@After("(execution(* *.*(..))")
public void afterReturning(JoinPoint jp) {
System.out.print("after");
}
@AfterThrowing(pointcut = "execution(* *.*(..))")
public void logException(JoinPoint jp, Exception t) {
System.out.print("throwing");
}
}
Run Code Online (Sandbox Code Playgroud)
但没有记录任何东西.我错过了什么?
Arj*_*jan 20
如果您在pom.xml中设置了AspectJ Maven插件,那么为了在Luna中使用它,您似乎首先需要添加以下更新站点(菜单帮助,安装新软件):
http://download.eclipse.org/tools/ajdt/44/dev/update/
从该站点,安装AspectJ开发工具.
安装完成后,您还可以通过Preferences,Maven,Discovery,Open Catalog 安装Maven Integration for AJDT,然后选择AspectJ m2e Configurator.
(尝试在安装工具之前执行最后一步,将抛出一个缺失的要求:AspectJ开发工具核心2.1.3.尝试从默认的Luna更新站点安装AspectJ时会抛出相同的错误.)
如果您想使用 AJDT,请尝试使用 Kepler。;-)
顺便说一句,您是否使用ajc(AspectJ 编译器)编译了切面和 Java 类?或者你想用javac编译它们?在这种情况下,您需要在运行时编织方面(LTW,加载时编织),并且需要编织代理 ( -javaagent:path/to/aspectjweaver.jar) 以及aop.xml. 在您告诉我您想做什么之后,我可以用一个具体的例子来更新这个答案。
更新:好的,我测试了你的方面。它包含一些语法错误和其他问题,例如
@Before("(execution(* *.*(..))")数字括号不匹配。相反,它应该是@Before("execution(* *.*(..))")。@AfterThrowing(pointcut = "execution(* *.*(..))", throwing = "t")。现在这是一个完全可测试的独立示例:
驱动程序应用:
class Application {
public static void main(String[] args) {
new Application().foo();
}
public void foo() {
try {
sayHello("world");
}
catch (Exception e) {
System.out.println("Caught exception: " + e);
}
}
public void sayHello(String recipient) {
System.out.println("Hello " + recipient + "!");
throw new RuntimeException("Oops!");
}
}
Run Code Online (Sandbox Code Playgroud)
方面:
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class LoggerAspect {
@Before("execution(* *.*(..))")
public void intercept(JoinPoint jp) {
System.out.println("before " + jp);
}
@After("execution(* *.*(..))")
public void afterReturning(JoinPoint jp) {
System.out.println("after " + jp);
}
@AfterThrowing(pointcut = "execution(* *.*(..))", throwing = "t")
public void logException(JoinPoint jp, Exception t) {
System.out.println("throwing " + jp);
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用ajc编译和运行:
假设您的源文件位于名为 的目录中src,并且您希望类文件最终位于 中bin,则编译方式如下:
ajc -sourceroots src -1.7 -d bin -cp aspectjrt.jar
Run Code Online (Sandbox Code Playgroud)
现在运行应用程序:
java -cp bin;aspectjrt.jar Application
before execution(void Application.main(String[]))
before execution(void Application.foo())
before execution(void Application.sayHello(String))
Hello world!
after execution(void Application.sayHello(String))
throwing execution(void Application.sayHello(String))
Caught exception: java.lang.RuntimeException: Oops!
after execution(void Application.foo())
after execution(void Application.main(String[]))
Run Code Online (Sandbox Code Playgroud)
如何使用 javac 编译并使用 LTW 运行:
您需要使用调试符号(-g)进行编译:
javac -g -cp aspectjrt.jar -d bin src\*.java
Run Code Online (Sandbox Code Playgroud)
在运行该程序之前,您需要在bin\META-INF\aop.xml(或aop-ajc.xml) 下进行 LTW 配置:
ajc -sourceroots src -1.7 -d bin -cp aspectjrt.jar
Run Code Online (Sandbox Code Playgroud)
现在您可以使用编织代理运行应用程序:
java -javaagent:aspectjweaver.jar -cp bin Application
Run Code Online (Sandbox Code Playgroud)
输出是相同的,但如果您想查看更多内容,可以添加其他编织器选项,例如
java -cp bin;aspectjrt.jar Application
before execution(void Application.main(String[]))
before execution(void Application.foo())
before execution(void Application.sayHello(String))
Hello world!
after execution(void Application.sayHello(String))
throwing execution(void Application.sayHello(String))
Caught exception: java.lang.RuntimeException: Oops!
after execution(void Application.foo())
after execution(void Application.main(String[]))
Run Code Online (Sandbox Code Playgroud)
这应该产生以下输出:
[AppClassLoader@58644d46] weaveinfo Join point 'method-execution(void Application.main(java.lang.String[]))' in Type 'Application' (Application.java:3) advised by before advice from 'LoggerAspect' (LoggerAspect.java)
[AppClassLoader@58644d46] weaveinfo Join point 'method-execution(void Application.main(java.lang.String[]))' in Type 'Application' (Application.java:3) advised by after advice from 'LoggerAspect' (LoggerAspect.java)
[AppClassLoader@58644d46] weaveinfo Join point 'method-execution(void Application.main(java.lang.String[]))' in Type 'Application' (Application.java:3) advised by afterThrowing advice from 'LoggerAspect' (LoggerAspect.java)
[AppClassLoader@58644d46] weaveinfo Join point 'method-execution(void Application.foo())' in Type 'Application' (Application.java:8) advised by before advice from 'LoggerAspect' (LoggerAspect.java)
[AppClassLoader@58644d46] weaveinfo Join point 'method-execution(void Application.foo())' in Type 'Application' (Application.java:8) advised by after advice from 'LoggerAspect' (LoggerAspect.java)
[AppClassLoader@58644d46] weaveinfo Join point 'method-execution(void Application.foo())' in Type 'Application' (Application.java:8) advised by afterThrowing advice from 'LoggerAspect' (LoggerAspect.java)
[AppClassLoader@58644d46] weaveinfo Join point 'method-execution(void Application.sayHello(java.lang.String))' in Type 'Application' (Application.java:16) advised by before advice from 'LoggerAspect'(LoggerAspect.java)
[AppClassLoader@58644d46] weaveinfo Join point 'method-execution(void Application.sayHello(java.lang.String))' in Type 'Application' (Application.java:16) advised by after advice from 'LoggerAspect' (LoggerAspect.java)
[AppClassLoader@58644d46] weaveinfo Join point 'method-execution(void Application.sayHello(java.lang.String))' in Type 'Application' (Application.java:16) advised by afterThrowing advice from 'LoggerAspect' (LoggerAspect.java)
before execution(void Application.main(String[]))
before execution(void Application.foo())
before execution(void Application.sayHello(String))
Hello world!
after execution(void Application.sayHello(String))
throwing execution(void Application.sayHello(String))
Caught exception: java.lang.RuntimeException: Oops!
after execution(void Application.foo())
after execution(void Application.main(String[]))
Run Code Online (Sandbox Code Playgroud)
如果您需要更多,-debug也可以将该选项添加到编织器选项中。
| 归档时间: |
|
| 查看次数: |
6122 次 |
| 最近记录: |