如何使用aspectJ快速修改已编译java类的行为
如何使用aspectJ向某些java应用程序临时添加功能?类似于创建aspect、使用ajc编译、使用java命令和一些额外的开关来应用aspect?问题是,我相信您能否在运行时启用/禁用Aspectj编写的代码 我不知道AspectJ中是否有内置机制,但我确信您可以使用条件语句将代码包装在Aspect中。然后,您需要做的就是在运行时打开或关闭代码 比如说如何使用aspectJ快速修改已编译java类的行为,java,aop,aspectj,Java,Aop,Aspectj,如何使用aspectJ向某些java应用程序临时添加功能?类似于创建aspect、使用ajc编译、使用java命令和一些额外的开关来应用aspect?问题是,我相信您能否在运行时启用/禁用Aspectj编写的代码 我不知道AspectJ中是否有内置机制,但我确信您可以使用条件语句将代码包装在Aspect中。然后,您需要做的就是在运行时打开或关闭代码 比如说 // HelloWorld.java public class HelloWorld { public static void sa
// HelloWorld.java
public class HelloWorld {
public static void say(String message) {
System.out.println(message);
}
public static void sayToPerson(String message, String name) {
System.out.println(name + ", " + message);
}
}
// PoliteHelloWorld.java
public aspect PoliteHelloWorld {
pointcut callSayMessage() : call(public static void HelloWorld.say*(..));
before() : callSayMessage() {
if( is_aspectj_turned_on_this_run() ) {
System.out.println("Good day!");
}
}
after() : callSayMessage() {
if( is_aspectj_turned_on_this_run() ) {
System.out.println("Thank you!");
}
}
}
您希望如何实现“是否启用此运行()
”取决于您(可能由命令行参数或用户输入设置?)
还有一种更好的方法,那就是更正一个方面,该方面处理您希望在运行时禁用的方面。这个新的额外特性将只负责检查您的“特性是否已打开此运行()
”。有关此更干净方法的详细信息,请参见
我不知道是否有比这两种方法更好的方法(很可能是),但这至少允许您在运行时随意打开和关闭它,而无需重新编译