sách gpt4 ăn đã đi

java - 查找非线程安全单例 spring 实现的代码质量规则

In lại Tác giả: IT Lão Cao 更新时间:2023-10-28 13:47:30 26 4
mua khóa gpt4 giày nike

是否有任何 Checkstyle、PMD 或 Findbugs 规则可以找到以下非线程安全的 spring 单例实现?

private String helperVar;

public String getValue(String value) {
helperVar = value;
return convertValue();
}

private String convertValue() {
return helperVar.trim();
}

我知道这个示例很糟糕,但它是表达我的意思的最简单方法。

在一次执行中从 bean 执行 getValue 方法时,它可以正常工作。但是在多用户环境中执行它会导致不可预知的错误/行为。

有没有办法在不手动检查代码的情况下找到这些事件?是否有任何静态代码检查器可以自动检查它以及它的每个变体?

câu trả lời hay nhất

您可能无法接受,但我有时会使用运行时 bean reflection验证代码一致性。

对于您的用例,我将首先让我的所有 bean 使用基于 constructor 的注入(inject),并使所有成员字段 cuối cùng。我相信 findbugs 甚至有一些不可变的 bean 检查器。

第二次为你的用例做代码一致性我会使用 Spring BeanPostProcessor或者只是一个实现 ApplicationContextAware 然后遍历 ApplicationContext 的类。现在您只需检查在您的应用程序上下文中加载的 bean(只需检查 bean 类的包名称)以确保所有字段都是 cuối cùng。是的,您将需要一个更宽松的安全管理器或启用您的安全策略以允许私有(private)变量反射,但对于大多数人来说,这不是问题,特别是如果您已经使用了类似 hibernate 的东西。

如果有一个不是最终的字段,即无效代码,你只是抛出一个异常,你的 Spring 应用程序将不会启动。

对于规则的各种异常(exception)情况,您可以对不需要是 final 的字段或需要忽略规则的类使用自定义注释。

您可能担心性能或 Spring 构造函数注入(inject)功能不够强大,但 Spring 在启动时已经进行了大量反射,并且基于构造函数的注入(inject)现在变得相当强大,以至于您甚至可以做属性占位符@Value(${PROP}).

的值

关于java - 查找非线程安全单例 spring 实现的代码质量规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189385/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress