当前位置: 首页 > 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.cnnetsun.cn/news/42923.html

相关文章:

  • 商业级图像合成引擎6.0版本重磅发布:解锁跨场景视觉创作新范式
  • MyBatis-Plus与Spring整合(02--Service的代理)
  • 11、渗透测试实战:目标探索、利用与攻击行动
  • 16、攻击收尾:报告与撤离
  • 20、树莓派的替代项目探索
  • 事件查看器-事件ID
  • 单步出图革命:Consistency Model如何以100倍效率重构AI绘画产业格局
  • 搭建鸿蒙PC命令行适配环境测试hello程序
  • 编辑相似度(Edit Similarity):原理、演进与多模态扩展
  • 【深度解析】MiniCPM 2.0:端侧大模型的技术性进展与技术革新
  • ClickHouse 快速入门
  • 基于SpringBoot的人事管理系统设计与实现
  • 【论文阅读】Multi-modal Spatial Clustering for Spatial Transcriptomics Utilizing High-resolution Histology
  • Day36官方文档的阅读
  • Windows右键菜单终极优化指南:让你的右键菜单重获新生
  • ZTools v1.1.2:桌面应用启动器与搜索工具
  • Flutter Android APK 重命名 签名验证操作
  • MarchingCubes 网格数据体素化并提取等值面
  • 基于SpringBoot的餐厅推荐系统 计算机毕业设计选题 计算机毕设项目 前后端分离 【源码-文档报告-代码讲解】
  • 禁用MinIO后的7种企业级替代方案评测
  • document.querySelector在电商网站中的5个实战应用
  • 企业级应用:OpenJDK1.8在生产环境中的部署实践
  • Homebrew实战:从安装到开发环境搭建全流程
  • 企业级Git仓库SSH连接安全最佳实践
  • Day12 贝叶斯优化可视化和随机森林的解读
  • 数据湖不是湖,是江湖:Delta Lake / Iceberg / Hudi 到底该选谁?
  • 告别开题报告模板拼凑!虎贲等考 AI 智能生成,让选题逻辑从模糊想法变身可执行研究计划
  • 【LeetCode刷题】跳跃游戏
  • 鸿蒙PC UI控件库 - PasswordInput 密码输入框详解
  • day37简单的神经网络@浙大疏锦行