如何解决普通方法调用静态属性Sonar的问题,很多新手都不清楚。为了帮助大家解决这个问题,下面小编就为大家详细讲解一下。需要的人可以从中学习,希望你能有所收获。
00-1010这是我们经常用来实现Spring的Bean工厂,编写一个工具类并打开一个静态方法:get实体类。
public class bean helperimplements bean factoryaware {
privatestaticBeanFactoryfactory
/**
*获取实体类。
*
*@paramid
* @返回
*/
publicatstatitgetbean(Stringid){ 0
return(T)factory . getbean(id);
}
/**
*成立豆厂。
*
*@parambeanFactory
*/
@覆盖
public voitSetBeanFactory(BeanFactoryBeanFactory){ 0
bean helper . factory=bean factory;
}
}声纳扫描报告:
实例方法不应写入“静态”字段正确地从非静态方法更新静态字段是一件棘手的事情,如果有多个类实例和/或多个线程在运行,很容易导致错误。理想情况下,静态字段只能从同步的静态方法中更新。每当从非静态方法更新静态字段时,此规则都会引发问题。
翻译:
从非静态方法中正确更新静态字段是很棘手的。如果有多个类实例和/或多个线程在运行,很容易导致错误。理想情况下,静态字段只能从同步静态方法中更新。每次从非静态方法更新静态字段时,此规则都会引发问题。
问题:普通方法调用静态属性时,Sonar会认为有问题
public classbeahnhelperimplements beanforceyaware {
privatestaticBeanFactoryfactory
/**
*获取实体类。
*
*@paramid
* @返回
*/
publicatstatitgetbean(Stringid){ 0
return(T)factory . getbean(id);
}
privatedstativationsetfactory(BeanFactoryFactory){ 0
BeanHelper.factory=factory
}
/**
*成立豆厂。
*
*@parambeanFactory
*/
@覆盖
public voitSetBeanFactory(BeanFactoryBeanFactory){ 0
setFactory(BeanFactory);
}
}
打包一个静态setFactory方法,声纳扫描不会造成问题。因为它是一个静态方法,所以将首先初始化它。此外,在setFactory方法中,可以判断BeanHelper.factory是否为空,如果不为空,则不会进行赋值,从而确保它不会被多个实例或多线程覆盖,因此这里不再详细描述。
阅读以上内容对你有帮助吗?如果您想了解更多相关知识或阅读更多相关文章,请关注行业资讯频道,感谢您的支持。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/38060.html