Springbootpackage com.example.cluster.web.domain.service.callback.impl; import com.example.cluster.common.utils.JacksonUtils; import com.example.cluster.web.domain.service.callback.CallBack; import com.example.cluster.web.infrastructure.handler.RequestHolder; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; Slf4j Service RequiredArgsConstructor(onConstructor __(Autowired)) public class JobChangerService { private final ApplicationContext applicationContext; public void backupCallback(String callerName, String uniqId, boolean isSuccess){ if (StringUtils.isBlank(callerName)) { return; } com.example.cluster.web.domain.entity.callback.CallBack back JacksonUtils.parse(callerName,com.example.cluster.web.domain.entity.callback.CallBack.class); CallBack callBack (CallBack) applicationContext.getBean(StringUtils.uncapitalize(back.getKey())); log.info(into callback step,callback is {},callBack); log.info(isSuccess is {},isSuccess); log.info(JobChangerService backupCallback {},JacksonUtils.toJson(RequestHolder.getCommonRequest())); if (isSuccess) { log.info(isSuccess); try { callBack.onSuccess(uniqId); } catch (InterruptedException e) { throw new RuntimeException(e); } return; } callBack.onFailed(uniqId); } }tomcat1web.xml listener listener-classcom.keji.dms.context.ContextLoaderListener/listener-class /listener import org.springframework.web.context.support.WebApplicationContextUtils; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class ContextLoaderListener implements ServletContextListener { private static Logger logger LoggerFactory.getLogger(ContextLoaderListener.class); SneakyThrows Override public void contextInitialized(ServletContextEvent servletContextEvent) { ServletContext servletContext servletContextEvent.getServletContext(); ApplicationContext applicationContext WebApplicationContextUtils.getWebApplicationContext(servletContext); DmsContext.getInstance().setServletContext(servletContext); DmsContext.getInstance().setApplicationContext(applicationContext); PropertyContext propertyContext (PropertyContext) applicationContext.getBean(propertyContext); DmsContext.getInstance().setPropertyContext(propertyContext); .... }tomcat2:这段代码是一个经典的 Spring 容器工具类用来在非 Spring 管理的代码中静态获取 IoC 容器。代码含义实现了 ApplicationContextAware 接口Spring 会在初始化该 Bean 时回填容器上下文拿到的 ApplicationContext 存到静态字段中之后任何地方包括 new 出来的普通对象、静态方法都可以通过 SpringUtil.getApplicationContext() 获取容器进而 getBean(…)setApplicationContext 什么时候被调用由 Spring 容器自动回调时机是容器启动 → 扫描并实例化该 Bean → 属性注入完成之后 → 调用 Aware 接口回调invokeAwareInterfaces→ Bean 初始化完成也就是说应用启动时 Spring 创建 SpringUtil 这个 Bean 的过程中容器会主动调用 setApplicationContext(…) 并把自己传进来业务代码中不需要手动调用。注意 getApplicationContext() 里做了非空校验就是因为如果 Spring 没有完成回调静态字段就是 nullpackage com.example.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextException; import org.springframework.stereotype.Component; Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringUtil.applicationContext applicationContext; } public static ApplicationContext getApplicationContext() { if (applicationContext null) { throw new ApplicationContextException(SpringUtil.applicationContext is null); } return applicationContext; } }
企业数字化 ERP 产品动态
相关推荐
对应点齐了,相机位姿还是不对?用 Kornia 把 PnP 算对的最小路径 对应点齐了,相机位姿还是不对?用 Kornia 把 PnP 算对的最小路径 【免费下载链接】kornia 🐍 空间人工智能的几何计算机视觉库 项目地址: https://gitcode.com/kornia/kornia
3D 重建对不上、相机放偏了——你有 2D-3D 对应,… · 2026/11/4 1:48:00
Wan2.2-TI2V-5B 本地部署指南:单张 4090,9 分钟出 5 秒 720P 视频 Wan2.2-TI2V-5B 本地部署指南:单张 4090,9 分钟出 5 秒 720P 视频 【免费下载链接】Wan2.2-TI2V-5B Wan2.2-TI2V-5B是一款开源的先进视频生成模型,基于创新的混合专家架构(MoE)设计,显著提升了视频生成的质… · 2026/11/4 1:48:00
没 iPhone 也能玩:DiPlay 热点模式白嫖 CarPlay 没 iPhone 也能玩:DiPlay 热点模式白嫖 CarPlay 【免费下载链接】DiPlay Independent CarPlay receiver for compatible Android head units. Wired and wireless public preview. 项目地址: https://gitcode.com/gh_mirrors/di/DiPlay
先说个扎心的帖子
车… · 2026/11/4 1:47:00
录得清、找得到、翻得快——规矩立住了才不烧心 "贵是贵点,但吃了不烧心""宁可少挣点,规矩不能坏"——这个秋天最出圈的台词,说的是包子铺,戳的是所有人:不怕多花点功夫,怕的是被糊弄。 职场里最常被糊弄的地方在哪?就在会… · 2026/11/4 2:36:15
LIT:学习交互与导演——协同进化视频导演智能体 LIT:学习交互与导演——协同进化视频导演智能体 会议:ICLR 2027 arXiv编号:arXiv:2610.41865v1 [cs.AI] 摘要 视频导演智能体负责编排多阶段制作流程,实现用户的创意构想。现有自进化相关研究大多聚焦剧本规划,却忽略用户交互能力与视频导演能力之间的相互强化效应:更充分… · 2026/11/4 2:36:15
自主意识的虚假本质| 赵杰 | 量子哲学 作者:赵杰清华大学硕士、微美全息云科技(NASDAQ:WIMI)董事长、微算法科技(NASDAQ:MLGO)董事长、育杰奖学金创始人1. 《量子意识爱子论》本体基础宇宙最小意识-能量-信息单元为爱子,全… · 2026/11/4 2:36:15
辩证法仅是表象浅层规则| 赵杰 | 量子哲学 作者:赵杰清华大学硕士、微美全息云科技(NASDAQ:WIMI)董事长、微算法科技(NASDAQ:MLGO)董事长、育杰奖学金创始人总前置理论铺垫(理解辩证矛盾的两大底层根基)一、爱子论… · 2026/11/4 2:36:15
DeepSeek Super-agent 工作原理深度拆解 10月31日晚,DeepSeek 干了一件不大张旗鼓、但后劲很足的事。Harness 团队发了篇技术文章《Super-agent 设计探索:迈向更自主的 Agent 系统》,顺手把原型代码开源了。两天,9000 star。但你可能已经发现了:这两天刷屏的文… · 2026/11/4 2:36:15
Linux(23):文件操作入门——从 C 文件接口到文件描述符 文件操作可以从两层接口理解:C 标准库提供 FILE * 流,Linux/POSIX 接口使用整数形式的文件描述符。两层接口最终都与进程访问文件有关,但它们提供的抽象和数据处理方式不同。
本文从 fopen、fprintf、fclose 出发,再衔接 open、re… · 2026/11/4 2:35:15
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46