1

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

我可以使用什么工具或技术来自动查找可与 ApsectJ 一起使用但不适用于自动代理的 @Transactional 的所有用法?

4

2 回答 2

2

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

于 2013-02-22T22:24:30.147 回答
1

我不知道有什么工具可以开箱即用地找到这些。因此,您可能需要自己编写;但这不是微不足道的。

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

但是,找出哪些方法调用了哪些其他方法是相当困难的。由于您在谈论同一个类中的方法,所以它更容易一些。您可以为此使用字节码分析(有关一些相关库,请参阅这篇文章invokevirtual):只需解析类方法中的andinvokeinterface指令,并查看它们是否与带有@Transactional注释的指令相匹配。

于 2013-02-19T18:30:49.443 回答