Spring中ApplicationContextAware接口的用法(Util)

# Spring上下文工具类 SpringContextUtils 工具类 Spring上下文工具类 SpringContextUtils 工具类 问题分析 从Spring上下文中获得已经装配的Bean,方便拿到配置文件中的配置的资源信息。当一个类实现ApplicationContextAware之后,这个类就可以方便获得ApplicationContext中的所有的Bean。ApplicationContextAware的实现类中对Application 进行了初始化,所以实现这个类可以拿到当前上下文中所有的Bean。 工具类实现 @Component public class 阅读详情

1前言

  • 应用场景
    在spring项目中,bean之间的依赖关系是 spring容器自动管理的,但是一个项目中有些类不在spring容器中却需要使用spring管理的bean,例如:①在静态方法中获取Dao对象查数据库;②类上没有@Component等。这时候不能通过正常的方式(注解等方式)注入bean,在spring中提供了ApplicationContextAware接口,通过ApplicationContextAware接口可以获取到spring上下文,从而从spring上下文中获取到需要的bean。
  • 大致原理
    ApplicationContext的BeanFactory 的子类, 拥有更强大的功能,ApplicationContext可以在服务器启动的时候自动实例化所有的bean,而 BeanFactory只有在调用getBean()的时候才去实例化那个bean, 这也是我们为什么要得到一个ApplicationContext对象, 事实上Spring2相关的web应用默认使用的是ApplicationContext对象去实例化bean, 换一句话说, 在服务器启动的时候,Spring容器就已经实例化好了一个ApplicationContext对象,所以我们要在老的代码里尝试去获取这个对象。 但是如何才能得到一个ApplicationContext对象呢?方法很多,最常用的办法就是用ClassPathXmlApplicationContext,FileSystemClassPathXmlApplicationContext, FileSystemXmlApplicationContext 等对象去加载Spring配置文件,这样做也是可以, 但是在加载Spring配置文件的时候,就会生成一个新的ApplicaitonContext对象而不是Spring容器帮我们生成的哪一个, 这样就产生了冗余, 所以我们在这里不采用这种加载文件的方式,我们使用ApplicationContextAware让Spring容器传递自己生成的ApplicationContext给我们, 然后我们把这个ApplicationContext设置成一个类的静态变量, 这样我们就随时都可以在老的代码里得到Application的对象了。

2实际操作

  • 工具类编写
//package com.xm.hardwaremanagement.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * Function: Spring容器管理接口
 *
 * @author Lys
 * Date: 2019/03/28 18:03
 * @since JDK 1.8
 */
@Component
public class SpringContextUtils implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    /**
     * 取得存储在静态变量中的ApplicationContext.
     * 这个对象和自动注入的是同一个。
     */
    public static ApplicationContext getApplicationContext() {
        checkApplicationContext();
        return applicationContext;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextUtils.applicationContext = applicationContext;
    }

    /**
     * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
     */
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String name) {
        checkApplicationContext();
        return (T) applicationContext.getBean(name);
    }

    /**
     * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
     */
    @SuppressWarnings("unchecked")
    public static <T> T getBean(Class<T> clazz) {
        checkApplicationContext();
        return (T) applicationContext.getBean(clazz);
    }

    /**
     * 清除applicationContext静态变量.
     */
    public static void cleanApplicationContext() {
        applicationContext = null;
    }

    private static void checkApplicationContext() {
        if (applicationContext == null) {
            throw new IllegalStateException("applicaitonContext未注入");
        }
    }


}

  • 完结
【Python 实战基础】如何绘制热力图来模拟绘制北京景区热度图 Python如何绘制热力图来模拟绘制北京景区热度图 文件读写 基础语法 字符串处理 文件生成 数据构建 阅读详情

相关推荐

处理图数据, 安装“Pytorch“ + 图神经网络开源框架“PyG “+ “ogb“使用

"OGB" OSError: [WinError 127] 找不到指定的程序。1.[遇到这类问题往往跟torch安装的工具包(如torch-sparse,torch-scatter,torch-cluster)版本没对应上有关](https://blog.youkuaiyun.com/weixin_42358688/article/details/117433691)2.[OGB使用环境安装与依赖](https://ogb.stanford.edu/docs/home/)Data Loaders3.[torch-geo

Fuguir™的博客 3698

ApplicationContextAware使用封装SpringContextUtils

在prepareBeanFactory时就会获取到ApplicationContext,只需要实现@Override setApplicationContext方法,在spring内部会。参考: https://blog.youkuaiyun.com/yaomingyang/article/details/98316409。自定义获取bean工具,SpringContextUtils.java。获取到applactionContext。

jinying_51eqhappy的博客 270

整合WGCNA、机器学习和孟德尔随机化

(G)通过蛋白质免疫印迹法(Western blot)测定的 UT-B(由 SLC14A1 编码)、ARHGEF38、NEFH、MSMB、KRT23 和 KRT15 在前列腺癌肿瘤组织和癌旁非癌组织中的蛋白质表达水平。本研究利用来自基因表达综合数据库(GEO)的数据集筛选差异表达基因(DEGs),并采用加权基因共表达网络分析(WGCNA),以识别在模块中与前列腺癌高度相关的驱动基因。(F)蓝绿色模块中的模块成员关系(MM)与前列腺癌(PCa)的基因显著性(GS)的散点图。(D)6 个基因之间的相关性分析。

多组・学・多组学 1138

ApplicationContextAware接口 spring

ApplicationContextAware 接口的作用 先来看下Spring API 中对于 ApplicationContextAware 这个接口的描述:     即是说,当一个类实现了这个接口之后,这个类就可以方便地获得 ApplicationContext 中的所有bean。换句话说,就是这个类可以直接获取Spring配置文件中,所有有引用到的bean对象。     ...

KK的博客 557

ARM交叉编译gdbserver并远程在线调试

arm-linux平台。5、生成完整的makefile,新建full_install,执行 ./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- CC=arm-linux-gnueabihf-gcc --prefix=/home/geyuxi/Documents/full_install。如果--host和--build不同,是交叉编译;

wangjie36的博客 3168

20 Embedding 与向量检索:语义为什么能变成距离

Embedding 是 RAG 语义检索的数学基础。本文用工程视角讲清文本如何变成向量,为什么语义相近会表现为距离相近,Top-K 检索如何工作,以及在模型选择、同模型约束、精确匹配和召回评估上的常见坑。

老于的笔记的专栏 6204

Spring上下文工具类 ApplicationContextUtil

Spring上下文工具类 ApplicationContextUtil

hello stone 909

SAP Joule for Consultants 与 Joule for Developers 全面解读

SAP推出面向不同用户群体的Joule AI助手:开发者版(Joule for Developers)专注于编码提效,嵌入开发工具链辅助生成、重构和测试代码;顾问版(Joule for Consultants)聚焦业务场景,集成SAP云应用知识库,为咨询项目提供方案设计、差距分析和实施指引。两者共享AI底座但功能侧重点不同:开发者版优化技术开发流程,顾问版加速项目交付周期。典型应用场景包括制造业云转型方案制定和ABAP代码迁移,分别展示了两版本在业务决策支持和技术实施中的价值。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 545

自定义的SpringContextUtil继承ApplicationContextAware

自定义的SpringContextUtil继承ApplicationContextAware

qq_41831842的博客 1226

Buck电源设计常见的一些问题(四)MOS管振荡抑制方法(二)

另一方面,开关振铃为远超开关频率的高频振铃,并伴随很高的 dV/dt,会带来传导和辐射的 EMI 问题,可能会使得终端产品不能通过 EMI 标准测试,更严重时甚至会干扰开关电源自身的信号电路或临近的其他功能电路的正常工作。选用二极管反向特性好的器件;该电路可等效成图 3 中 LC 谐振电路,新的 LR和 CR为 Lp1、Lp5,Lp3, Lp4, CD等所有参与振铃的寄生感容的复合值。通常 Snubber 的 Csnub取值在数 nF 以上,在振铃频率 fR(加了 snubber 后)下的阻抗很小。

小幽余生不加糖 2892

D19: OpenClaw 安全性配置指南

在 OpenClaw 的 30 天探索旅程中,我们已经探讨了邮件自动化(D18)。今天进入安全专题,我将分享一个至关重要的话题:OpenClaw 安全性配置指南。 随着 OpenClaw 深入工作流核心,它掌握了越来越多的敏感信息: API Keys(GitHub、飞书、Notion、Jira...) 企业数据(代码库、文档、聊天记录) 个人数据(日历、邮件、任务) 系统权限(文件读写、命令执行、网络访问) 安全不是可选项,而是必选项。一次配置失误可能导致: API Key 泄露 → 账号被盗用权限

刘一说的IT专栏 203

Spring spring中InitializingBean接口和ApplicationContextAware接口

ApplicationContextAware接口1.首先什么是ApplicationContext ApplicationContext的BeanFactory 的子类, 拥有更强大的功能,ApplicationContext可以在服务器启动的时候自动实例化所有的bean,而 BeanFactory只有在调用getBean()的时候才去实例化那个bean, 这也是我们为什么要得到一个Applic

JavaLab 2657

PHP实现获取当地网络时间​(附完整源码)

PHP实现获取当地网络时间​(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 237

ApplicationContextAware 的作用

ApplicationContextAware 通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationContext方法。 我们在ApplicationContextAware的实现类中,就可以通过这个上下文环境对象得到Spring容器中的Bean。   看到—Aware就知道是干什么的了,就是属性注入的,但是这个Ap...

香烟达人的博客 3577

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

记录:spring接口ApplicationContextAware

项目里看到有人写了个这个,自己回来照猫画虎写了一个垃圾例子: 实现ApplicationContextAware接口的类: @Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @O...

qq_34785454的博客 202

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring中ApplicationContextAware的作用

ApplicationContextAware 通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationContext方法。 我们在ApplicationContextAware的实现类中,就可以通过这个上下文环境对象得到Spring容器中的Bean。 看到—Aware就知道是干什么的了,就是属性注入的,但是这个ApplicationContextAware的不同地方在于,实现了这个接口的bean,当spring容器初始化的时候,会自

511

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

spring框架 在Util一般工具类中加载spring中的Bean对象(服务类等)

准备工作 在一般的Util工具类中,并没有 spring中的 @component 等注解,不能直接使用spring 的注入,一般的成员属性可能均为静态成员属性,包括对外提供的方法也都是静态的,而如果我们想在Util工具类使用被 @service 某一服务模块的对象显然是不能直接引用的,一方面是加载顺序的,一方面并不支持注入。 此时可以再添加一个用于获取 Spring bean的中间工具类,间接获取 spring 中的bean 添加如下: import org.springframework.beans.B

weixin_44131922的博客 2136

ApplicationContextAware 接口的作用

ApplicationContextAware 通过ApplicationContextAware:可以自动调用实例化ApplicationContext,Spring容器会把上下文环境对象调用 看到—Aware就知道是干什么的了,就是属性注入的,但是这个ApplicationContextAware的不同地方在于,实现了这个接口的bean,当spring容器初始化的时候,会自动的将Applica...

zhonghuaidong的博客 340

spring中ApplicationContextAware接口使用理解

http://www.pinhuba.com/spring/101049.htm一、这个接口有什么用?当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。二、怎么使用这个接口?例如我有一个方法类AppUtil,这个方...

liyanlei的专栏 206

spring bean util

spring工具类 方便在非spring管理环境中获取bean。* Spring应用上下文环境 */

gaohl0501的博客 693

通过ApplicationContextAware获取spring容器中的bean

方法一:http://blog.sina.com.cn/s/blog_6ec6be0e0101h59l.html fangfa

is_zhoufeng的专栏 1170

ApplicationContextAware接口的作用

加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的 public void setApplicationContext(ApplicationContext context) throws BeansExceptio

乔志勇笔记 496

对象抓取 Util (ApplicationContextAware)

ApplicationContext对象抓取工具类便于使用。

scdncby的博客 213

ApplicationContextAware 获取任意bean信息

@Component public class SpringAppContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContextHolder; @Override public void setApplicationContext(A

Acder的专栏 514

ApplicationContextAware的使用原理

作用继承ApplicationContextAware接口,可以在Tomcat启动后获取Spring的ApplicationContext,从而可以获取bean对象.案例定义Utils类,继承接口注意:我们在使用SpringUtils的时候,不用调用其set方法,因为在web.xml中配置监听器后,Spirng将会自动调用set方法,完成applicationContext的赋值public cla

guanhang89的专栏 1210

Spring --getBean用法

1.在初始化时保存ApplicationContext对象 2.通过Spring提供的utils类获取ApplicationContext对象 3.继承自抽象类ApplicationObjectSupport 4.继承自抽象类WebApplicationObjectSupport 5.实现接口ApplicationContextAware 6.通过Spring提供的ContextLoader 来说一下实现接口的方法: @Component public class example im.

hx1043116928的博客 1179
上一篇: JAVA8新特性之Optional<T> 类
下一篇: HttpClient之mica-http 的使用
jothan_lee
博客等级 码龄9年 30粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值