Sonar问题解决:普通方法调用静态属性
问题:普通方法调用静态属性时,Sonar会认为有问题
这是我们经常用的,实现Spring的Bean工厂,写一个工具类, 开放一个静态方法:获取实体类
public class BeanHelper implements BeanFactoryAware {private static BeanFactory factory;/*** 获取实体类* * @param id* @return*/public static <T> T getBean(String id) {return (T) factory.getBean(id);}/*** 设置bean工厂* * @param beanFactory*/@Overridepublic void setBeanFactory(BeanFactory beanFactory) {BeanHelper.factory = beanFactory;}
}
复制代码
Sonar扫描会报:
Instance methods should not write to "static" fields Correctly updating a static field from a non-static method is tricky to get right and could easily lead to bugs if there are multiple class instances and/or multiple threads in play. Ideally, static fields are only updated from synchronized static methods. This rule raises an issue each time a static field is updated from a non-static method.
翻译:
正确地从非静态方法更新静态字段是很棘手的, 如果在运行中有多个类实例和 / 或多个线程, 则可以很容易地导致 bug。理想情况下, 静态字段只从同步静态方法更新。 每次从非静态方法更新静态字段时, 此规则将引发一个问题。
解决办法:对静态属性包装一个静态方法
public class BeanHelper implements BeanFactoryAware {private static BeanFactory factory;/*** 获取实体类* * @param id* @return*/public static <T> T getBean(String id) {return (T) factory.getBean(id);}private static void setFactory(BeanFactory factory) {BeanHelper.factory = factory;}/*** 设置bean工厂* * @param beanFactory*/@Overridepublic void setBeanFactory(BeanFactory beanFactory) {setFactory(beanFactory);}
}
复制代码
包装一个静态 setFactory 方法,Sonar扫描就不会产生问题,由于是静态方法,会被最先初始化,更近一步,可以在 setFactory 方法中,判断 BeanHelper.factory 是否为 null,不为 null 则不赋值,保证不会被多实例或多线程覆盖,此处就不详细写出了。
Sonar问题解决:普通方法调用静态属性相关推荐
- PHP中普通方法如何调用静态属性,php中的静态属性和静态方法如何调用
静态属性.方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就有多少个属性). (推荐教程:php图文教程) 实例: header("content-type: ...
- php 类名访问静态属性,请问可以用类名直接调用静态属性吗?
header("content-type:text/html;charset=utf-8"); class Human{ static public $name = "李 ...
- 类属性、类方法;私有属性、公有属性;私有方法、公有方法;静态属性、静态方法;python的命名规范__xx__\__xx\_xx(自用笔记)
Ⅰ.类属性.类方法(类和实例都能调用类属性和类方法) 类是一个特殊的对象,Python 中 一切皆对象:class AAA: #定义的类属于 类对象obj1 = AAA() #属于 实例对象 除了封装 ...
- 初学者python笔记(静态属性、类方法、静态方法、类的组合)
文章目录 类的三大方法 1.静态属性 2.类方法.静态方法 3.三大方法总结 类的组合 1.用法分析 2.面试案例分析 本篇文章是上一篇:初学者python笔记(面向对象编程.类与对象)的后续篇,是关 ...
- 静态属性、静态方法、静态代码块
1.什么是静态属性.静态方法 用static修饰符修饰的属性和方法叫作静态属性和静态方法 静态属性和非静态属性的区别: 1.在内存中存放的位置不同:所有static修饰的属性和方法都存放在内存的方法区 ...
- python 类静态属性_python面向对象之静态属性/静态方法/类方法/组合
继续学习,不要松懈 #!/usr/bin/env python # coding:utf-8 class Campus: def __init__(self,name,addr,type): self ...
- 关于JVM方法调用的那些事
本文来说下JVM方法调用的那些事 文章目录 概述 方法调用 静态分派 动态分派 JVM动态分派实现 本文小结 概述 Java具备三种特性:封装.继承.多态. Java文件在编译过程中不会进行传统编译的 ...
- JavaScript 公有 私有 静态属性和方法
1.公有属性和公有方法 这里的 name age 都是参数传递进去 可以在外面直接实例化调用. 2.私有属性和方法 私有的只能在函数内部使用 作用域的原因 3.静态属性和静态方法 这里我首先 创建 ...
- php静态方法怎么调用非静态属性,关于静态方法不能调用类中的非静态属性的理解...
class test{ public $a; public function game(){ echo "123"; } public static function name() ...
最新文章
- 数据系列:如何在Windows Azure虚拟机上设置SQL Server
- NodeJS基础2---2 Promise详解
- Linux之grep
- 【洛谷P2927 [USACO08DEC]拼图游戏Jigsaw Puzzles】深搜
- php 日志函数,php 写入日志函数
- windows比linux差在哪,怎么让新手理解Linux比Windows好在哪里!
- 真实经历:整整一年了,他是这样从程序员转型做产品经理的
- 电脑用户名_仁霸下料优化软件如何找回密码、更换绑定电脑?
- Linux下使用socket传输文件的C语言简单实现
- 【转】VS中常用图标提示含义
- clsq客户端android,Android NDK开发之 arm_neon.h文件ABI说明
- 【java学习之路】(java SE篇)014.Stream API
- OpenGL渲染YUV420P
- java中符号常量_Java中符号常量
- 第三方支付如何玩转大数据
- 粒子群优化算法实现寻找函数最值
- 一起聆听碳氮循环研究新动态,我们在苏州期待您的精彩分享和参与!
- 因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?Link ID=135170 中的 about_Execution_Policies
- mysql在购物车中的应用_ajax在购物车中的应用
- 看见她力量丨中国铁建地产铁姐,内外多面,绽放光彩!
热门文章
- 从零开始学python数据分析-从零开始学Python数据分析与挖掘 PDF 下载
- python3.8.5怎么用-python3.8 五分钟就可以入门
- 编程没基础学python多长时间--零基础学Python,从入门到精通需要多长时间
- python简单代码演示效果-演示python如何创建和使用一个简单的元类的代码
- python开发需要掌握哪些知识-Python的8个基础知识点,新手必须背下来!
- python要学多久-python需要学多久?自学两年也很难达到企业标准!
- python软件安装步骤-Linux中Python 环境软件包安装步骤
- 重构-改善既有代码的设计读书笔记
- LeetCode Course Schedule II(拓扑排序)
- Qt运行一个实例进程