Awa*_*Awa 12 java performance spring static sonarqube
我在我的程序中有以下代码片段,并且在与Maven集成之后,我正在运行SonarQube 5以进行代码质量检查.
但是,Sonar要求将封闭方法设为"静态"或删除此设置.方法是setApplicationContext.
如何删除此错误?为什么会出现这个错误?
public class SharedContext implements ApplicationContextAware {
public static final String REPORT_ENGINE_FACTORY = "reportEngineFactory";
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
SharedContext.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public Object getBean(String name) {
return applicationContext.getBean(name);
} }
Run Code Online (Sandbox Code Playgroud)
cce*_*ist 12
不管怎样,我可能会因为这样说而被 Sonar 社区和 Java Universe 列入黑名单,添加@SuppressWarnings("squid:S2696")
到有问题的方法的顶部会导致 Sonar 完全忽略该警告。
G. *_*eam 10
具体来说,您似乎在询问规则S2696,"实例方法不应写入"静态"字段"
正如规则描述细节:
正确地
static
从非静态方法更新字段是很难做到的,如果有多个类实例和/或多个线程在运行,很容易导致错误.理想情况下,static
字段仅从synchronized static
方法更新.
因此,问题在于告诉您创建它所引发的方法(大概setApplicationContext
)static
,以便在所有类实例中只有该方法的一个副本对static
(即在所有类实例中共享)字段进行更新applicationContext
.它还建议制作方法,synchronized
以便一次只能调用一个实例.