2

我必须确保在某个包下的类的所有公共方法中执行一段代码:

public String doStuff(String a, Integer b, Context c) {
   current.put(c); <--- code that need to be executed
   // business logic
   ...
}

确保该代码片段始终作为每个公共方法的第一行出现的最佳方法是什么?

我考虑过使用一些静态代码分析工具,例如 PMD。另外,我相信编译时 AOP 会有所帮助。还有什么想法,指点?

我知道我可以为此使用一个方面。问题是我的应用程序正在使用 Spring,但我需要“检查”的类不是 Spring 管理的 - 另外,我想避免更改服务器启动选项以启用基于 Spring 注释的运行时编织。

编辑:我必须强制执行代码的类是Akka Typed Actors。

4

2 回答 2

0

我需要将“上下文”对象传递给下一层,我打算为此使用 ThreadLocal。该片段必须将当前上下文放入线程本地。

如果您使用的是 Spring,您是否考虑过将上下文设置为线程范围的 bean?如果这是通过 HTTP 请求,您可以在 bean 上使用scope="request",Spring 将为您管理事情(包括将请求范围的 bean 传递给单例)。

您可以轻松创建更通用的线程范围。

于 2011-03-15T21:18:45.070 回答
0

PMD 是一个不错的选择。此外,您可以将其与 IDE 集成,所有开发人员都会收到通知。

另一种选择是在您的构建过程中添加一些步骤,该步骤将使用一些正则表达式(或 Java 解析器 - PMD 也有一个)修改源代码,或者使用 ASM 或 JavaAssist 等库添加一些字节码生成,这些库将处理您的编译后的代码。

如果您可以使用 AspectJ,那么您也可以在编译类文件后使用它对类文件进行后处理,以检查/添加一些代码。

如果您可以使用一些工厂实现来控制此类创建,那么您可以围绕创建的实例创建一个动态代理。

于 2011-04-22T09:35:32.950 回答