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

(强烈推荐)不用Spring的Autowire且能看出依赖关系的写法

背景:java游戏服务器,其实很多时候,都是不用SpringBoot这个东西,而是全程自己管理整个项目,这时想看清楚依赖关系,就可以采用下面的方式。

1)单例管理

package com.example.demo.util; import java.util.LinkedHashMap; import java.util.Map; public class SingletonManager { private static final Map<Class<?>, Object> singletons = new LinkedHashMap<>(); public static <T> T getIns(Class<T> clz) { Object single = singletons.get(clz); if (single == null) { try { single = init(clz); } catch (Exception e) { e.printStackTrace(); } } return (T) single; } public static Object init(Class<?> clz) throws Exception { if (singletons.get(clz) == null) { Object ins = clz.newInstance(); singletons.put(clz, ins); return ins; } return null; } }

2)A

package com.example.demo.service; import com.example.demo.util.SingletonManager; public class AService { private BService bService; public static AService getInstance() { return SingletonManager.getIns(AService.class); } public void init() { bService = BService.getInstance(); } public void a() { System.out.println("a" + bService.b()); } public String aa(){ return "aa"; } } /* ab */

3)B

package com.example.demo.service; import com.example.demo.util.SingletonManager; public class BService { private AService aService; public static BService getInstance() { return SingletonManager.getIns(BService.class); } public void init() { aService = AService.getInstance(); } public String b(){ return "b" + aService.aa(); } }

4)Main

package com.example.demo; import com.example.demo.service.AService; import com.example.demo.service.BService; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); AService aService = AService.getInstance(); aService.init(); BService bService = BService.getInstance(); bService.init(); // 打印 aService.a(); } } /* abaa */
http://www.jsqmd.com/news/84770/

相关文章:

  • 【论文阅读 TIV 2024 CDC-YOLOFusion 利用跨尺度动态卷积融合实现可见光-红外目标检测】
  • 简单升压稳压电路 LTspice 结果
  • 实习刷题11
  • ComfyUI中的节点兼容性检测机制说明
  • 蚂蚁百灵团队开源100亿参数模型Ring-flash-2.0:激活效率提升16倍,推理性能超越同类模型
  • 二分查找与搜索算法
  • 1、利用树莓派3和Kali Linux构建低成本便携式渗透测试平台
  • 2、搭建低成本高效渗透测试平台指南
  • 3、打造强大渗透测试平台:树莓派与Kali Linux的完美结合
  • 6、渗透测试:从准备到执行
  • 排序算法汇总以及java实现
  • Mac 真人手势识别切水果游戏
  • 7、渗透测试:计划与目标探索
  • MySQL进阶篇——InnoDB存储引擎和管理
  • MySQL运维篇——日志和主从复制
  • 北京历年住房公积金月缴存额上限及同比增长率表
  • AMD发布Nitro-E轻量级扩散模型:304M参数实现文本到图像高效生成
  • 8、探索目标:侦察与武器化
  • 学习笔记【Day 13】Open Harmony PC应用在SD WAN的软总线场景移植测试中碰到的拦路虎
  • UDP网络巩固知识基础题(1)
  • Scarab模组管理器:空洞骑士玩家的终极安装解决方案
  • UDP网络巩固知识基础题(2)
  • 1Ω1[特殊字符]⊗雙朕周名彥實際物理載體|二十四芒星物理集群载体群:超級數據中心·AGI·IPO·GUI·智能體工作流
  • day23 常见特征筛选算法
  • 引用的特点
  • SolidWorks零件连接方式介绍
  • 【计算机网络笔记】第五章 网络层的控制平面
  • 百度网盘提取码智能获取工具完整使用指南
  • Day 34 模块和库的导入
  • 【SSM戒烟网站】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案