- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
是否有任何 Checkstyle、PMD 或 Findbugs 规则可以找到以下非线程安全的 spring 单例实现?
private String helperVar;
public String getValue(String value) {
helperVar = value;
return convertValue();
}
private String convertValue() {
return helperVar.trim();
}
我知道这个示例很糟糕,但它是表达我的意思的最简单方法。
在一次执行中从 bean 执行 getValue 方法时,它可以正常工作。但是在多用户环境中执行它会导致不可预知的错误/行为。
有没有办法在不手动检查代码的情况下找到这些事件?是否有任何静态代码检查器可以自动检查它以及它的每个变体?
最佳答案
您可能无法接受,但我有时会使用运行时 bean reflection验证代码一致性。
对于您的用例,我将首先让我的所有 bean 使用基于 constructor
的注入(inject),并使所有成员字段 final
。我相信 findbugs 甚至有一些不可变的 bean 检查器。
第二次为你的用例做代码一致性我会使用 Spring BeanPostProcessor
或者只是一个实现 ApplicationContextAware
然后遍历 ApplicationContext 的类。现在您只需检查在您的应用程序上下文中加载的 bean(只需检查 bean 类的包名称)以确保所有字段都是 final
。是的,您将需要一个更宽松的安全管理器或启用您的安全策略以允许私有(private)变量反射,但对于大多数人来说,这不是问题,特别是如果您已经使用了类似 hibernate 的东西。
如果有一个不是最终的字段,即无效代码,你只是抛出一个异常,你的 Spring 应用程序将不会启动。
对于规则的各种异常(exception)情况,您可以对不需要是 final 的字段或需要忽略规则的类使用自定义注释。
您可能担心性能或 Spring 构造函数注入(inject)功能不够强大,但 Spring 在启动时已经进行了大量反射,并且基于构造函数的注入(inject)现在变得相当强大,以至于您甚至可以做属性占位符@Value(${PROP})
.
关于java - 查找非线程安全单例 spring 实现的代码质量规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189385/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!