leo*_*kom 7 java eclipse spring multithreading
当开发人员向Spring组件引入可变性时,我们遇到了多线程问题.像这样的东西:
@Component //singleton
public class MyComponent {
...
private String intermediateResults;
public String businessMethod() {
... fills in intermediateResults;
}
public String thisGetterShouldNotBeHere() {
return intermediateResults;
}
}
Run Code Online (Sandbox Code Playgroud)
这导致了多线程的错误 - 字段intermediateResults已经从不同的线程访问.
有没有办法阻止向Spring Singleton添加状态,例如通过某种静态分析器?SonarQube插件?Eclipse插件?谢谢你的建议.
MutabilityDetector似乎能够完全满足您的需求:
Mutability Detector 旨在分析 Java 类并报告给定类的实例是否不可变。它可以用于:
- 在单元测试中,使用像assertImmutable(MyClass.class)这样的断言。你的类实际上是不可变的吗?您刚刚做出的更改之后怎么样?
- 作为 FindBugs 插件。您用 @Immutable 注释的那些类,实际上是吗?在运行时。您的 API 是否需要提供不可变对象?从命令行。您想在整个代码库上快速运行可变性检测器吗?
无论如何,我建议添加一个明确的合同,声明该类应该通过类本身javadoc或通过 @Immutable类本身的注释是不可变的,以允许(明智的)开发人员维护类的必要条件。(如果可变性检测器无法检测特定类型的不变性,例如:字符串、日期真的不可变吗?)
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |