我必须确保在某个包下的所有公共类方法中执行一段代码:
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。
答案 0 :(得分:0)
我需要将“Context”对象传递给下一层,我打算使用ThreadLocal。该片段必须将当前上下文放入threadlocal。
如果您正在使用Spring,您是否考虑过将上下文设置为线程范围的bean?如果这是通过HTTP请求,您可以在bean上使用 scope =“request”,Spring将为您管理一些事情(包括将请求范围的bean传递给单例)。
您可以轻松创建更通用的线程范围。
答案 1 :(得分:0)
另一个选择是在构建过程中添加一些步骤,使用一些正则表达式修改源代码(或Java解析器 - PMD也有一个)或使用ASM或JavaAssist等库添加一些字节代码生成在编译后对代码进行后处理。
如果您可以使用AspectJ,那么您也可以使用它来编译后对类文件进行后处理,以检查/添加一些代码。
如果您可以使用某些Factory实现来控制此类创建,那么您可以围绕创建的实例创建动态代理。