当前位置: 首页 > news >正文

郑州怎样建设公司网站织梦网站文章内容模板

郑州怎样建设公司网站,织梦网站文章内容模板,wordpress张戈,成都的汽车网站建设有个第三方工具类#xff0c;不支持多例模式。但是又不能直接改第三方工具类的代码#xff0c;因此可以通过反射破坏第三方工具类的单例。 第三方工具类反编译如下 可以看到构造函数进行了私有化#xff0c;不允许外部new#xff0c;只能通过newInstance进行实例化。并且…有个第三方工具类不支持多例模式。但是又不能直接改第三方工具类的代码因此可以通过反射破坏第三方工具类的单例。 第三方工具类反编译如下 可以看到构造函数进行了私有化不允许外部new只能通过newInstance进行实例化。并且newInstance是单例的。 DataHandler.class public class DataHandler {private static volatile DataHandler INSTANCE;private final byte[] encryptKeys;private final String publicKeys;private final String privateKeys;private final String appID;private final String secret;private String version 2.0.0;private boolean skipVerify false;private DataHandler(String appID, String secret, String publicKey, String privateKey) throws IOException {//.....}public static DataHandler newInstance(String appID, String secret, String publicKey, String privateKey) throws IOException {if (INSTANCE null) {Class var4 DataHandler.class;synchronized(DataHandler.class) {if (INSTANCE null) {INSTANCE new DataHandler(appID, secret, publicKey, privateKey);}}}return INSTANCE;} }通过反射破坏单例模式 import java.lang.reflect.Constructor;public class DataHandlerFactory {public static DataHandler createNewInstance(String appId, String appSecret, String publicKey, String privateKey) {try {// 获取DataHandler类的构造函数ConstructorDataHandler constructor DataHandler.class.getDeclaredConstructor(String.class, String.class, String.class, String.class);constructor.setAccessible(true);// 通过反射创建新的实例return constructor.newInstance(appId, appSecret, publicKey, privateKey);} catch (Exception e) {return null;}}}使用方法 //原本使用第三方工具类的方式默认单例模式 DataHandler dataHandler DataHandler.newInstance(appId, appSecret, publicKey, privateKey);//修改后允许多例。createNewInstance方法如果抛出异常那么是有可能为null因此下面要进行手动判空 DataHandler dataHandler DataHandlerFactory.createNewInstance(appId, appSecret, publicKey, privateKey); if (Objects.isNull(dataHandler)) {throw new RuntimeException(创建DataHandler对象失败请检查appId, appSecret, publicKey, privateKey值是否正确。); }通过缓存构造函数、缓存重复的实例进一步提升性能和减少反射所带来的性能开销 优化DataHandlerFactory类 import lombok.extern.slf4j.Slf4j;import java.lang.reflect.Constructor; import java.util.concurrent.ConcurrentHashMap;Slf4j public class DataHandlerFactory {// 使用线程安全的 ConcurrentHashMap 存储实例public static final ConcurrentHashMapString, DataHandler instanceCache new ConcurrentHashMap();// 缓存构造函数private static ConstructorDataHandler cachedConstructor;static {try {cachedConstructor DataHandler.class.getDeclaredConstructor(String.class, String.class, String.class, String.class);cachedConstructor.setAccessible(true);} catch (NoSuchMethodException | SecurityException e) {log.error(e.getMessage(), e);}}public static DataHandler createNewInstance(String appId, String appSecret, String publicKey, String privateKey) {// 创建一个缓存键String cacheKey appId _ appSecret _ publicKey _ privateKey;// 检查缓存中是否已有该实例如果有则直接返回DataHandler instance instanceCache.get(cacheKey);if (instance ! null) {return instance;}// 如果缓存中没有该实例则创建并缓存try {instance cachedConstructor.newInstance(appId, appSecret, publicKey, privateKey);// 存入缓存并确保线程安全instanceCache.put(cacheKey, instance);return instance;} catch (Exception e) {log.error(e.getMessage(), e);return null;}}}
http://www.zqtcl.cn/news/58641/

相关文章:

  • 外贸公司手机网站民宿平台搜索量上涨
  • 长沙 公司网站城市建设网站设计
  • 建站教程流程图江门网站建设推广策划
  • 网站优化的策略大型网站建设兴田德润实惠
  • 网站公司如何推广网站2023年8月新闻热点事件
  • 做论坛网站价格做资源教程网站
  • 所有北京网站建设公司网站开发的策划方案
  • 电子商务网站建设策划方案水稻网站做go分析
  • 网站制作广全球十大搜索引擎入口
  • 天津网站开发培训wordpress 谷歌分析
  • wordpress vue网站济南微信网站
  • 如何做自己的网站后台深圳网站建设首选上榜网络
  • 网站建设字体颜色代码医院网站怎么做运营
  • 绵阳网站建设费用p2p网站建设小微金融
  • 网站建设相对路径典当行网站策划
  • 重庆网站建设公司多少钱网站建设需要提供的资料文档
  • 织梦做的网站前面有不安全app软件开发哪个公司好
  • 网站seo服务公司网站怎么规范管理的
  • 开源php企业网站上海集团网站建设咨询
  • 肇庆网站建设优化建筑人才网招聘网官网首页
  • 松江网站建设平台工友洗手粉网站建设中
  • windows 2012做网站伪静态国外产品展示网站源码
  • 网站做推广页需要什么软件下载桂林网站制作哪家好
  • 网站建设 爱诚科技北京网站建设公司如何排版
  • 网站建设与推广销售户话术网站建设安全标准
  • 微网站开发需要几个人聊城wap网站建设
  • 中山皇冠建设开发有限公司网站网页qq邮箱怎么取消自动登录
  • 东营网站搭建自己做的网站如何上传
  • 网站建设的实验报告专业网站开发建设
  • 建分类网站得花多少钱网站项目建设策划书