如何在Spring中搜索无法使用autoproxy的所有事务方法?

时间:2013-02-19 18:15:59

标签: java spring aspectj

我有一个使用Spring AOP和AspcetJ的应用程序,我想转换它以便它可以与spring auto proxy一起使用。这意味着我需要通过代码库来寻找对@Transactional方法的调用,这些方法在同一个类中调用其他@Transactional方法,因此不通过代理,以及私有方法上的@Transactional方法。

我可以使用哪种工具或技术自动查找@Transactional的所有用法,这些用法适用于ApsectJ但不能用于自动代理?

2 个答案:

答案 0 :(得分:2)

嗯,您已经在使用AspectJ,那么为什么不使用AspectJ动态地找出这些控制流并记录它们呢?因此,您可以使用AspectJ作为分析工具来摆脱AspectJ。 ; - )

答案 1 :(得分:1)

我不知道任何可以找到这些开箱即用的工具。所以你可能需要自己编写;但这并非无足轻重。

您可以编写注释处理器来处理带有注释的方法/字段/类。有关如何编写并运行它,请参阅the APT docs。 (请注意,在Java 6中,apt内置于javac中。)

然而,找出哪些方法调用哪些其他方法非常困难。既然你在谈论同一个类中的方法,那就容易多了。您可以对此使用字节码分析(请参阅this post了解一些相关库):只需解析类中方法中的invokevirtualinvokeinterface指令,然后查看它们是否与@Transactional对它们进行注释。