我现在做的一个是一个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到属性文件!!
希望有高手解惑!!