news 2026/9/6 21:59:39

使用ApplicationContext在非Service类中调用Spring的Serivce类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用ApplicationContext在非Service类中调用Spring的Serivce类

背景

有时我们需要在一些不属于Spring的类中,去调用Spring的Service类的方法。
比如,在Util类,或者main()方法中,去调用Service类的方法。
这时,可以使用 ApplicationContextAware接口 和 ApplicationContext接口 .

ApplicationContext 工具类:

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; @Component public class ApplicationContextUtil implements ApplicationContextAware { private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationContextUtil.class); private static ApplicationContext appContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { appContext = applicationContext; } public static <T> T getBean(Class<T> clazz) { if (appContext == null) { LOGGER.info("appContext is null"); return null; } return appContext.getBean(clazz); } }

示例:

比如Service名是 UserServiceImpl ,那么初始化如下 :

UserServiceImpl userService = ApplicationContextUtil.getBean(UserServiceImpl.class);

ApplicationContextAware接口的源码:

public interface ApplicationContextAware extends Aware { void setApplicationContext(ApplicationContext var1) throws BeansException; }

ApplicationContextAware 接口中只有一个方法 setApplicationContext(),我们可以实现 ApplicationContextAware 接口,来重写这个方法,设置 ApplicationContext 。

ApplicationContext接口的源码:

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver { String getId(); String getApplicationName(); String getDisplayName(); long getStartupDate(); ApplicationContext getParent(); AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException; }

ApplicationContext 接口,继承了 EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver。

BeanFactory

ApplicationContext里面这么多个类和接口,我们可以用Idea看一下相关的UML图:

前面的示例代码, applicationContext 使用了 getBean(Class var); 而在ApplicationContext 中是没有getBean这个方法的。
通过上面的UML图,可以留意到 ApplicationContext 继承 ListableBeanFactory, 而 ListableBeanFactory 继承 BeanFactory。
BeanFactory类里面,就有 getBean这个方法。getBean方法,就可以从Spring容器中返回特定名称的Bean对象。
也正因如此,ApplicationContext才能够实例化Bean。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 7:10:21

城通网盘直链解析神器:三步解锁高速下载新体验

城通网盘直链解析神器&#xff1a;三步解锁高速下载新体验 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘繁琐的下载流程而烦恼吗&#xff1f;城通网盘直链解析工具正是你需要的解决方案…

作者头像 李华
网站建设 2026/9/6 19:33:21

21届智能车赛外延创意:用车载语音指令触发ACE-Step音乐生成

智能车赛外延创意&#xff1a;用车载语音指令触发ACE-Step音乐生成 在一辆飞驰的智能汽车中&#xff0c;驾驶员轻声说了一句&#xff1a;“来点轻松的爵士乐&#xff0c;带点萨克斯&#xff0c;像深夜电台那样。”话音刚落&#xff0c;车内音响便流淌出一段即兴创作的原创旋律—…

作者头像 李华
网站建设 2026/9/7 4:48:48

2025年8款AI论文生成器大揭秘,一键极速写超长篇论文,效率提升300%!

在毕业季与科研申报高峰的双重压力下&#xff0c;大学生、研究生、科研人员最怕的不是课题难&#xff0c;而是写不完、写不好、改到崩溃。好消息是&#xff0c;2025年的AI论文工具已进化到能让你喝杯咖啡的时间&#xff0c;就拿到一篇高质量初稿&#xff0c;不仅轻松搞定万字长…

作者头像 李华
网站建设 2026/9/6 23:43:43

还在用留AIGC痕迹的AI写论文?7款免费工具知网维普查重过

还在用那些会留下明显“AI味”的工具生搬硬套论文大纲&#xff1f;还在为查重报告上刺眼的红色和飙升的“AI生成概率”而彻夜难眠&#xff1f;还在被导师一句“逻辑不通、语言生硬”的评语打回原稿&#xff0c;陷入无限修改的绝望循环&#xff1f; 如果你对以上任何一个问题疯…

作者头像 李华
网站建设 2026/9/6 18:37:20

Wan2.2-T2V-5B模型部署指南:快速搭建你的实时视频生成服务

Wan2.2-T2V-5B模型部署指南&#xff1a;快速搭建你的实时视频生成服务 在短视频内容爆炸式增长的今天&#xff0c;创作者和企业越来越依赖自动化工具来提升生产效率。然而&#xff0c;传统的文本到视频&#xff08;Text-to-Video, T2V&#xff09;模型往往需要多张高端GPU才能运…

作者头像 李华
网站建设 2026/9/7 5:56:04

HunyuanVideo-Foley实战教程:使用Git下载并运行视频音效AI

HunyuanVideo-Foley实战教程&#xff1a;使用Git下载并运行视频音效AI 在短视频日活突破十亿的今天&#xff0c;一个看似不起眼的问题正悄然制约内容创作效率——音效缺失。你有没有注意到&#xff0c;很多用户上传的精彩瞬间&#xff0c;比如玻璃碎裂、脚步踏地、门吱呀作响&a…

作者头像 李华