apollogter 2008-11-11 17:13
浏览 191
已采纳

AspectJ 能不能在编译期间执行advice

我现在做的一个是一个swing的遗留项目,上面的老大要求是将界面国际化!!

之前的那个程序员在代码里将类似的Jbutton.setText("****")都全部写死了!我人又懒,不想一行一行的检查代码然后再写一个resource文件!

所以我就想用AspectJ,查找所有的execution (javax.swing..*+.new(..)),
execution (* javax.swing..*+.setToolTipText(..))这之类的调用!

然后我在advice利用
jointPoint.getSignature().getDeclaringTypeName() +"."+ jointPoint.getSignature().getName()作为key,写到相应的resource.properties文件,那样我就可以继续编写相应的key的value了!

但是啊,现在的问题是,我只知道AspectJ是可以在程序运行的时候,也就是具体某个setTest()方法执行的时候捕捉到当前方法,然后我的相应的key就写入了resource.properties文件。

不过swing的程序是有些界面必须要用户点击相应的按钮才初始化,这就意味着我纪录在resource.properties文件中key并不是全部我要进行国际化的key. 有相当一部分我遗漏掉了。除非用户将所有的功能都点击一边,那样我才能纪录所有的需要国际化的key值!

我想问问各位老大,在编译期间除了将相应的advice植入我的代码,能不能只要查到相应的匹配的方法,就可以执行我的写入resource.properties的advice! 也就是有没有类似match(methodPattern)这样的pointCut. 而不仅仅是call,execution之类的!!

小弟,谢过先!
[b]问题补充:[/b]
我现在做的一个是一个swing的遗留项目,上面的老大要求是将界面国际化!!

之前的那个程序员在代码里将类似的Jbutton.setText("****")都全部写死了!我人又懒,不想一行一行的检查代码然后再写一个resource文件!

所以我就想用AspectJ,查找所有的execution (javax.swing..*+.new(..)),
execution (* javax.swing..*+.setToolTipText(..))这之类的调用!

然后我在advice利用
jointPoint.getSignature().getDeclaringTypeName() +"."+ jointPoint.getSignature().getName()作为key,写到相应的resource.properties文件,那样我就可以继续编写相应的key的value了!

但是啊,现在的问题是,我只知道AspectJ是可以在程序运行的时候,也就是具体某个setTest()方法执行的时候捕捉到当前方法,然后我的相应的key就写入了resource.properties文件。

不过swing的程序是有些界面必须要用户点击相应的按钮才初始化,这就意味着我纪录在resource.properties文件中key并不是全部我要进行国际化的key. 有相当一部分我遗漏掉了。除非用户将所有的功能都点击一边,那样我才能纪录所有的需要国际化的key值!

我想问问各位老大,在编译期间除了将相应的advice植入我的代码,能不能只要查到相应的匹配的方法,就可以执行我的写入resource.properties的advice! 也就是有没有类似match(methodPattern)这样的pointCut. 而不仅仅是call,execution之类的!!

小弟,谢过先!

不好意思刚才没有说清楚,我现在已经就是compiling time weaving 并且成功,但是我要求的是编译的时候可以进行我的文件写入的执行!不知道能不能办到??
[b]问题补充:[/b]
我现在做的一个是一个swing的遗留项目,上面的老大要求是将界面国际化!!

之前的那个程序员在代码里将类似的Jbutton.setText("****")都全部写死了!我人又懒,不想一行一行的检查代码然后再写一个resource文件!

所以我就想用AspectJ,查找所有的execution (javax.swing..*+.new(..)),
execution (* javax.swing..*+.setToolTipText(..))这之类的调用!

然后我在advice利用
jointPoint.getSignature().getDeclaringTypeName() +"."+ jointPoint.getSignature().getName()作为key,写到相应的resource.properties文件,那样我就可以继续编写相应的key的value了!

但是啊,现在的问题是,我只知道AspectJ是可以在程序运行的时候,也就是具体某个setTest()方法执行的时候捕捉到当前方法,然后我的相应的key就写入了resource.properties文件。

不过swing的程序是有些界面必须要用户点击相应的按钮才初始化,这就意味着我纪录在resource.properties文件中key并不是全部我要进行国际化的key. 有相当一部分我遗漏掉了。除非用户将所有的功能都点击一边,那样我才能纪录所有的需要国际化的key值!

我想问问各位老大,在编译期间除了将相应的advice植入我的代码,能不能只要查到相应的匹配的方法,就可以执行我的写入resource.properties的advice! 也就是有没有类似match(methodPattern)这样的pointCut. 而不仅仅是call,execution之类的!!

小弟,谢过先!

不好意思刚才没有说清楚,我现在已经就是compiling time weaving 并且成功,但是我要求的是编译的时候可以进行我的文件写入的执行!不知道能不能办到??

我自己给出一种愚蠢的解决办法吧,我利用AspectJ的日志,添加showWeaveInfo="true" 属性,它将自动的纪录所有满足pointcut条件的被植入的方法,然后我自己需要在将此日志作进一步处理,解析其中的key到属性文件!!

希望有高手解惑!!

  • 写回答

3条回答 默认 最新

  • iteye_521 2008-11-11 17:24
    关注

    不用试了,这个基本上很难

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3