强制执行代码片段始终存在于一组Java类中

时间:2011-03-14 13:20:52

标签: java aop static-code-analysis

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

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

确保每段公共方法始终存在作为第一行的最佳方法是什么?

我考虑过使用一些静态代码分析工具,比如PMD。另外,我相信编译时间AOP可以提供帮助。更多的想法,指针?

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

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

2 个答案:

答案 0 :(得分:0)

  

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

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

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

答案 1 :(得分:0)

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

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

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

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