news 2026/7/7 20:08:50

使用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/7/7 10:23:33

Nginx配置HTTPS加密传输保护ACE-Step用户数据安全

Nginx配置HTTPS加密传输保护ACE-Step用户数据安全 在AI音乐创作平台日益普及的今天&#xff0c;像ACE-Step这样的开源模型服务正被越来越多创作者用于生成个性化旋律与音频内容。每当用户输入一段文字描述或上传灵感片段时&#xff0c;这些数据都会通过网络传送到远端服务器进行…

作者头像 李华
网站建设 2026/7/6 23:20:57

实测9款AI写论文工具:知网查重一把过,不留AIGC痕迹超省心

一、9款AI论文工具核心对比&#xff1a;谁能帮你轻松搞定知网查重&#xff1f; 作为常年和论文打交道的科研狗&#xff0c;我深知写论文的痛&#xff1a;选题难、初稿慢、导师意见看不懂、查重率居高不下、AI痕迹被抓包……为了帮大家解决这些痛点&#xff0c;我实测了9款热门…

作者头像 李华
网站建设 2026/7/7 11:58:10

还在用AI直接写论文?这7个工具教你巧妙降重不留痕!

一、别再踩坑&#xff01;这些AI论文写作的致命错误你中了几个&#xff1f; 还在用ChatGPT直接复制粘贴写论文&#xff1f;查重率飙到30%被导师骂到狗血淋头&#xff1f;AI生成的内容一眼就被识破&#xff0c;学术诚信警告悬在头顶&#xff1f; 如果你正被这些问题困扰&#…

作者头像 李华
网站建设 2026/7/6 14:54:14

基于ACE-Step镜像的AI音乐创作实战:从零开始生成你的第一首曲子

基于ACE-Step镜像的AI音乐创作实战&#xff1a;从零开始生成你的第一首曲子 在短视频、独立游戏和自媒体内容爆炸式增长的今天&#xff0c;一个共同的痛点浮现出来&#xff1a;高质量原创配乐太难获取了。创作者要么受限于版权库中的“罐头音乐”&#xff0c;听起来千篇一律&am…

作者头像 李华
网站建设 2026/7/7 9:06:01

Lostlife2.0角色对话系统升级:基于LLama-Factory微调剧情模型

Lostlife2.0角色对话系统升级&#xff1a;基于LLama-Factory微调剧情模型 在如今的互动叙事游戏中&#xff0c;玩家早已不再满足于“点击选项、观看动画”的被动体验。他们渴望与NPC进行真正意义上的对话——那些回应不只是预设脚本的回声&#xff0c;而是带着性格、记忆和情绪…

作者头像 李华