确保弹簧组件是无状态的
当开发人员将可变性引入Spring组件时,我们遇到了多线程问题。 像这样的东西:
@Component //singleton
public class MyComponent {
...
private String intermediateResults;
public String businessMethod() {
... fills in intermediateResults;
}
public String thisGetterShouldNotBeHere() {
return intermediateResults;
}
}
这导致了多线程的bug - 字段intermediateResults已经从不同的线程访问。
是否有一种方法可以防止通过某种静态分析器向Spring Singleton添加状态? SonarQube插件? Eclipse插件? 感谢您的建议。
谷歌的MutabilityDetector似乎能够完全满足你的需求:
Mutability Detector旨在分析Java类并报告给定类的实例是否不可变。 它可以使用:
无论如何,我会建议添加一个明确的合同,声明该类应该是不可变的,要么通过javadoc
要么通过类本身的@Immutable
注释,以便(明智的)开发人员维护类的必备条件。 (如果谷歌的探测器未能检测到特定类型的不变性,例如:是字符串,日期真的不可变?)
你可以用任何静态分析器(如FindBugs,PMD和Checkstyle)来实现你自己的规则来检查你的类:
但是,据我所知,没有专门配置的工具。
或者,您可以创建@Immutable
注释并在其中执行检查。
上一篇: Make sure spring component is stateless
下一篇: Make Gradle use Maven local repository for downloading artifacts