news 2026/4/18 3:18:40

使用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/4/16 12:38:31

ITK-SNAP医学图像分割终极指南:从入门到精通的高效方法

ITK-SNAP医学图像分割终极指南&#xff1a;从入门到精通的高效方法 【免费下载链接】itksnap ITK-SNAP medical image segmentation tool 项目地址: https://gitcode.com/gh_mirrors/it/itksnap 还在为复杂的医学图像分析而苦恼吗&#xff1f;ITK-SNAP作为一款专业的开源…

作者头像 李华
网站建设 2026/4/16 13:41:18

C语言实现求字符串长度函数(附带源码)

一、项目背景详细介绍在C语言程序设计中&#xff0c;字符串处理是一个极其重要的知识模块&#xff0c;而“求字符串长度”则是字符串操作中最基础、最常见的功能之一。无论是在系统开发、嵌入式程序、网络通信&#xff0c;还是在日常算法练习中&#xff0c;字符串长度的获取都是…

作者头像 李华
网站建设 2026/4/17 20:07:42

桌面歌词终极指南:让音乐与文字完美同步

桌面歌词终极指南&#xff1a;让音乐与文字完美同步 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics LyricsX是一款专为macOS用户设计的桌面歌词显示工具&#xff0c;能够…

作者头像 李华
网站建设 2026/4/16 13:12:47

ContextMenuManager终极指南:彻底掌控Windows右键菜单

ContextMenuManager终极指南&#xff1a;彻底掌控Windows右键菜单 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 右键点击文件或文件夹时&#xff0c;你是否曾因…

作者头像 李华
网站建设 2026/4/16 11:29:38

PYPOWER入门指南:Python电力系统分析的完整解决方案

想要轻松掌握电力系统分析的核心技能吗&#xff1f;PYPOWER作为MATPOWER的Python移植版本&#xff0c;为电力工程师和研究人员提供了一套完整的电力系统分析工具集。这款强大的Python库让复杂的潮流计算和最优潮流分析变得简单高效&#xff0c;是电力系统分析的理想选择。 【免…

作者头像 李华
网站建设 2026/4/17 17:22:30

从GitHub获取gpt-oss-20b最新代码并集成到Dify部署环境

从GitHub获取gpt-oss-20b最新代码并集成到Dify部署环境 在大模型落地日益迫切的今天&#xff0c;越来越多团队开始尝试摆脱对OpenAI等闭源API的依赖。一个典型的痛点是&#xff1a;虽然GPT-4能力强大&#xff0c;但每次调用都意味着成本支出&#xff0c;且用户数据必须上传至第…

作者头像 李华