当前位置:  开发笔记 > 编程语言 > 正文

如何使用aspectJ快速修改已编译的java类行为

如何解决《如何使用aspectJ快速修改已编译的java类行为》经验,为你挑选了1个好方法。

如何使用aspectJ临时向某些Java应用程序添加功能?有点像创建方面,用ajc编译,使用带有一些额外开关的java命令来应用方面?



1> hhafez..:

我相信这个问题是你可以在运行时启用/禁用Aspectj编织的代码.

我不知道AspectJ中是否有内置机制,但我确信您可以使用条件语句将代码包装在Aspect中.然后你需要做的就是在运行时切换代码开启或关闭

例如

// 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!");
        }
    }
}

您希望如何实现" is_aspect_j_turned_on_this_run()"取决于您(可能由命令行参数或用户输入设置?)

有一种更好的方法,即处理您希望在运行时禁用的方面的方面.这个新的额外方面只负责检查您的" is_aspect_j_turned_on_this_run()".有关此清洁方法的详细信息,请查看此处

我不知道是否有比这两种方法更好的方法(非常好)但这至少允许你在运行时打开和关闭它多次,无需重新编译.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有