描述:Write to static field 通过实例方法更新静态属性
This instance method writes to a static field. This is tricky to get correct if multiple instances are being manipulated, and generally bad practice.
常见于常量类,直接通过类名.常量名获取的方式违背了封装的原则,findbugs不提倡使用,而如果将常量改成静态成员变量,又因为spring不支持静态注入导致不能实现,解决方法是非静态的setter调用静态的setter方法给静态成员变量赋值。
原问题代码:
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
SpringUtils.applicationContext = applicationContext;
}
解决办法:
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
//改动1、用静态set方法给static field 赋值
setApplicationContextStatic(applicationContext);
}
//改动2、静态set方法
public static void setApplicationContextStatic(final ApplicationContext applicationContext) {
SpringUtils.applicationContext = applicationContext;
}