Spring中ApplicationContextAware使用说明

ApplicationContextAware作用及如何使用 阅读详情

Spring 中提供一些Aware相关接口,像是BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,实作这些 Aware接口的Bean在被初始之后,可以取得一些相对应的资源,例如实作BeanFactoryAware的Bean在初始后,Spring容器将会 注入BeanFactory的实例,而实作ApplicationContextAware的Bean,在Bean被初始后,将会被注入 ApplicationContext的实例等等。
 Bean取得BeanFactory、ApplicationContextAware的实 例目的是什么,一般的目的就是要取得一些档案资源的存取、相 关讯息资源或是那些被注入的实例所提供的机制,例如ApplicationContextAware提供了publishEvent()方法,可以支持基 于Observer模式的事件传播机制。
 ApplicationContextAware接口的定义如下:

ApplicationContextAware.java

public interface ApplicationContextAware {
    void setApplicationContext(ApplicationContext context);
}

 我们这边示范如何透过实作ApplicationContextAware注入ApplicationContext来实现事件传播,首先我们的HelloBean如下:

HelloBean.java

package onlyfun.caterpillar;

import org.springframework.context.*;
public class HelloBean implements ApplicationContextAware {
    private ApplicationContext applicationContext;
    private String helloWord = "Hello!World!";

    public void setApplicationContext(ApplicationContext context) {
        this.applicationContext = context;
    }

    public void setHelloWord(String helloWord) {
        this.helloWord = helloWord;
    }

    public String getHelloWord() {
        applicationContext.publishEvent(
               new PropertyGettedEvent("[" + helloWord + "] is getted"));
        return helloWord;
    }
}

ApplicationContext会由Spring容器注入,publishEvent()方法需要一个继承ApplicationEvent的对象,我们的PropertyGettedEvent继承了ApplicationEvent,如下:

PropertyGettedEvent.java

package onlyfun.caterpillar;

import org.springframework.context.*;

public class PropertyGettedEvent extends ApplicationEvent {
    public PropertyGettedEvent(Object source) {
        super(source);
    }
}

 当ApplicationContext执行publishEvent()后,会自动寻找实作ApplicationListener接口的对象并通知其发生对应事件,我们实作了PropertyGettedListener如下:

PrppertyGettedListener.java

package onlyfun.caterpillar;

import org.springframework.context.*;

public class PropertyGettedListener implements ApplicationListener {
    public void onApplicationEvent(ApplicationEvent event) {
        System.out.println(event.getSource().toString());   
    }
}

 Listener必须被实例化,这我们可以在Bean定义档中加以定义:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="propertyGetterListener" class="onlyfun.caterpillar.PropertyGettedListener"/>

    <bean id="helloBean" class="onlyfun.caterpillar.HelloBean">
        <property name="helloWord"><value>Hello!Justin!</value></property>
    </bean>
</beans>

 我们写一个测试程序来测测事件传播的运行:

Test.java

package onlyfun.caterpillar;

import org.springframework.context.*;
import org.springframework.context.support.*;

public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

        HelloBean hello = (HelloBean) context.getBean("helloBean");
        System.out.println(hello.getHelloWord());
    }
}

 执行结果会如下所示:

log4j:WARN No appenders could be found for logger 
(org.springframework.beans.factory.xml.XmlBeanDefinitionReader).
log4j:WARN Please initialize the log4j system properly.
org.springframework.context.support.ClassPathXmlApplicationContext: 
displayName=[org.springframework.context.support.ClassPathXmlApplicationContext;
hashCode=33219526]; startup date=[Fri Oct 29 10:56:35 CST 2004]; 
root of ApplicationContext hierarchy
[Hello!Justin!] is getted
Hello!Justin!

 以上是以实作事件传播来看看实作Aware接口取得对应对象后,可以进行的动作,同样的,您也可以实作ResourceLoaderAware接口:

ResourceLoaderAware.java

public interface ResourceLoaderAware {
    void setResourceLoader(ResourceLoader loader);
}

 实作ResourceLoader的Bean就可以取得ResourceLoader的实例,如此就可以使用它的getResource()方法,这对于必须存取档案资源的Bean相当有用。
 基本上,Spring虽然提供了这些Aware相关接口,然而Bean上若实现了这些界面,就算是与Spring发生了依赖,从另一个角度来看,虽然您可以直接在Bean上实现这些接口,但您也可以透过setter来完成依赖注入,例如:

HelloBean.java

package onlyfun.caterpillar;

import org.springframework.context.*;

public class HelloBean {
    private ApplicationContext applicationContext;
    private String helloWord = "Hello!World!";

    public void setApplicationContext(ApplicationContext context) {
        this.applicationContext = context;
    }

    public void setHelloWord(String helloWord) {
        this.helloWord = helloWord;
    }

    public String getHelloWord() {
        applicationContext.publishEvent(new PropertyGettedEvent("[" + helloWord + "] is getted"));
        return helloWord;
    }
}

 注意这次我们并没有实作ApplicationContextAware,我们在程序中可以自行注入ApplicationContext实例:

ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

HelloBean hello = (HelloBean) context.getBean("helloBean");
hello.setApplicationContext(context);
System.out.println(hello.getHelloWord());

 就Bean而言,降低了对Spring的依赖,可以比较容易从现有的框架中脱离。

原文地址:http://hi.baidu.com/java6666/item/aff06134c0af1a362e0f81ef

基于STM32+ESP8266+手机APP的心率血氧温湿度监测报警系统设计(项目资料ID:18) 基于 STM32 微控制器、ESP8266 无线模块和 QT 手机 APP 的多参数监测报警系统。该系统可实时采集心率、血氧饱和度、环境温湿度等参数,通过 OLED 显示屏本地显示,并通过 WiFi 模块上传至手机 APP 实现远程监测与数据可视化。系统具备报警阈值自定义功能,当参数超出设定范围时,通过蜂鸣器和 LED 进行声光报警。系统以 STM32F103 为控制核心,采用 MAX30102 传感器采集心率和血氧,DHT20 采集温湿度,通过 ESP8266 实现无线通信,配合 QT 开发的手机 APP 阅读详情

相关推荐

告别调参烦恼:用Simulink手把手实现自适应模糊PID温度控制(附模型下载)

本文详细介绍了如何使用Simulink实现自适应模糊PID温度控制,解决传统PID调参难题。通过模糊推理引擎动态调整PID参数,系统能自动适应不同工况,显著提升控制精度和响应速度。文章包含完整的建模步骤、参数优化技巧和工业应用扩展,并附赠可下载模型,帮助工程师快速掌握这一智能控制技术。

weixin_30872499的博客 153

Spring之底层架构核心概念-事件发布

事件发布的两种方式 A. applicationContext.publishEvent("msg") B. 事件发布器 applicationEventPublisher.publishEvent("msg");

青苔小榭 527

ubuntu安装英伟达显卡驱动后wifi消失解决方法

ubuntu安装英伟达显卡驱动后(比如4090和3090等),会把wifi和蓝牙驱动去除,导致wifi无法连接。需要重新下载驱动安装。

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 3903

ApplicationContext.publishEvent ——Java异步调用的一种方式

一、先抽象出来一个事件类继承 ApplicationEvent ,定义一个 execute 业务执行方法 /** * @author sukang */ public abstract class AbstractEvent extends ApplicationEvent { public AbstractEvent(Object source) { super(source); } /** * 事件执行方法 */ protected abstract void execu

sxlzs_的博客 9236

对计算机专业来说学历真的重要吗?

我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...

启舰 55万+

JESD204B Subclass 1的SYSREF机制

SYSREF 是一个系统级同步脉冲信号,用于对齐 JESD204B 中的 LMFC(Local Multi-Frame Clock),从而实现每次建链的延迟一致性。核心点内容说明是系统参考跨多个芯片、多通道实现精确同步控制 LMFC决定所有设备的 LMFC 对齐点仅用于 Subclass 1是 JESD204B 实现确定性延迟的前提条件一般通过时钟芯片生成推荐使用 AD9528、LMK04828,支持 JESD204 专用输出建链过程中关键作用。

weixin_41230430的博客 1829

Spring的ApplicationContextAware的使用

Spring的ApplicationContextAware的使用1 问题引入2 ApplicationContextAware的简介3 使用场景 Spring中ApplicationContextAware主要用来获取Spring上下文已经实例化的Bean对象 1 问题引入 项目使用Spring管理各个实例对象Bean, 如果为了使用已被实例化的Bean对象,如果使用再次加载配置文件的方法,可能会出现一个问题,如一些线程配置任务, 会启动两份,产生了冗余. ApplicationContext app

ABestRookie的博客 7456

Bellhop水声信道模型的仿真

Bellhop是一种基于射线追踪的水声信道模型,广泛用于预测水下环境中的声压场。它通过模拟声波在水中的传播路径,计算声场分布,适用于复杂的水下通信场景。

yt94832的博客 1315

ApplicationContextAware接口提供了publishEvent方法,实现了Observe(观察者)设计模式的传播机制,实现了对bean的传播...

新增要操作的对象bean import org.springframework.context.ApplicationEvent; public class AddEvent extends ApplicationEvent{ private String name; public AddEvent(Object source,String name) { super(s...

weixin_30951743的博客 479

VMware ESXi 直通GPU

虚拟机需要独享GPU资源,那么就需要用到DirectPath I/O (直通),ESXi hypervisor 把 GPU 设备直接映射成虚机中的 GPU 设备,供应用使用。注意,内存注意一定要勾选预留,否则开机后报错如下:无法打开虚拟机 win10 的电源。1.ESXi主机,管理,硬件,PCI设备,勾选GPU卡,切换直通,会提示要求重启主机,重启主机之后,该GPU设备直通一栏显示为“活动”。先确认虚拟机是否EFI引导:编辑虚拟机 - 虚拟机选项 - 引导选项 - 固件 - EFI。

liwension的博客 6293

华为MetaERP的交易计税模块(即“税务引擎”)在设计上确实受到Oracle E-Business Tax(EBTax)等国际先进税务架构理念的影响,但结合了华为自身全球化运营、多准则合规、高并发处

华为MetaERP税务引擎在借鉴Oracle EBTax三层架构基础上,创新升级为五层智能税务架构,实现从"税码驱动"到"场景+规则+AI驱动"的转变。该模块采用云原生微服务架构,支持全球190+国家税务规则动态加载,具备实时计税、多准则并行处理、AI风险预警等核心能力,深度适配金税工程等国内合规要求。通过税务数字孪生、RPA机器人等创新,形成自主可控的智能税务中枢,为跨国企业提供全栈国产化税务解决方案,重新定义ERP税务管理范式。

金牌架构师 114

观察者模式:Spring之publishEvent的使用

用观察者模式中的publishEvent实现。

weixin_49374214的博客 1441

【Arduino 动手做】六舵机自平衡 Rotary Stewart 平台

《Arduino六舵机自平衡Rotary Stewart平台项目》 该项目展示了一个基于Arduino的六自由度Rotary Stewart平台,通过六个舵机实现动态平衡控制。设计采用激光切割框架和TAMIYA 70171套件,提供详细组装指南和开源固件(GitHub可获取)。开发者丹·罗耶分享了3D打印文件、视频演示及运动学优化需求,强调该平台可扩展应用于游戏控制(如Kerbal Space Program)或教育领域。项目链接包含完整资源包,鼓励用户参与改进并分享创作成果。该案例体现了Arduino在机

雕爷学编程 1092

Spring Boot 中的 Aware 接口以及 ApplicationContextAware 的详细说明、使用示例及注意事项

Spring Boot 中的 Aware 接口以及 ApplicationContextAware 的详细说明、使用示例及注意事项

爱的叹息的专栏 2083

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring中ApplicationContextAware接口使用理解说明

一、APPLICATIONCONTEXTAWARE的作用 1、APPLICATIONCONTEXT是什么? 很多人都知道,ApplicationContext是我们常用的IOC容器,而他的顶层接口便是BeanFactory,ApplicationContext对BeanFactory做了拓展,功能更加强大。 2、APPLICATIONCONTEXTAWARE作用 在Spring/SpringMVC中,我们拿到IOC容器无非有三种方式,那就是使用ApplicationContext接口下的三个实现类:

李云龙的意大利面 1274

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

AI Skill录制原理与实操:语义化自动化入门指南

AI Skill是一种将人工操作转化为可复用自动化单元的技术概念,其核心在于视觉语义理解与操作意图建模,而非传统录屏或脚本编程。通过UI元素的语义锚定、轻量状态机决策和沙盒化运行环境,实现跨页面、跨分辨率、高容错的Web端自动化。该技术显著降低RPA使用门槛,适用于运营、HR、财务等高频重复场景的数据搬运、状态同步与报表生成,是当前面向非技术人员的轻量化流程自动化主流方案。本文聚焦豆包Skill的落地实践,详解其如何以‘所见即所录’方式实现真正开箱即用的AI自动化。

weixin_34310369的博客 152

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spring之Bean实现了ApplicationContextAware等aware接口,对于setApplicationContext方法执行时间点的说明

对于实现了Aware接口的Bean对象,如: public class beanTest implement ApplicationContextAware { private static ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext app

fycghy0803的专栏 6696

关于Spring几个特殊类的说明与备忘(BeanNameAware\ApplicationContextAware\InitializingBean\DisposableBean)

关于Spring几个特殊类的说明与备忘 applicationContext.xml        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.spr

多言数穷,不如守中。十语九中,未必称奇;一语未中,愆尤骈集。 2万+

Spring应用 4 ApplicationContextAware应用理解

Spring应用 4 ApplicationContextAware应用理解 Aware接口的Bean在被初始之后,可以取得一些相对应的资源。 Aware接口本身并不具备什么功能,一般是用于子类继承后,Spring上下文初始化bean的时候会对这个bean传入需要的资源。 例如ApplicationContextAware接口,可以在Spring初始化实例 Bean的时候,可以通过这个接口将当...

u011679955的博客 280

Spring中ApplicationContextAware的作用

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

weixin_30292843的博客 92

Spring中ApplicationContextAware接口的使用

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

u013619689的专栏 594

ApplicationContextAware接口的作用

  1/============== 在Web应用中,Spring容器通常采用声明式方式配置产生:开发者只要在web.xml中配置一个Listener,该Listener将会负责初始化Spring容器,MVC框架可以直接调用Spring容器中的Bean,无需访问Spring容器本身。在这种情况下,容器中的Bean处于容器管理下,无需主动访问容器,只需接受容器的依赖注入即可。 但在某些特殊的情况...

weixin_33696106的博客 102

Spring中 DisposableBean | ApplicationContextAware 使用

关于在spring容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二种是:通过在xml中定义init-method 和destory-method方法 第三种是:通过bean实现InitializingBean和 DisposableBean接口 例如:Tra...

qq_37109975的博客 328

ApplicationContextAware

通过实现这个接口,bean 可以主动访问 Spring 容器,从而可以动态获取其他 bean、资源文件或容器相关信息。是 Spring 框架中的一个接口,用于让 bean 能够获取到 Spring 容器的。当一个 bean 实现该接口后,Spring 容器会在初始化该 bean 时,自动调用。可以获取bean、资源、环境配置。方法,并将容器自身的。

287
上一篇: Dubbo 对配置文件的解析
下一篇: ApplicationContextAware接口
weiythi
博客等级 码龄16年 23粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值