spring的ApplicationContext,事件监听器与国际化消息

深入解析Spring ApplicationContext:核心原理、生命周期与高级应用 控制反转(IoC)是Spring框架的核心设计思想,它通过将对象的创建和依赖关系的管理交给容器来实现解耦。其核心原理在于依赖注入(DI),容器负责实例化Bean并注入所需依赖,从而简化了企业级应用的开发。这一技术价值在于提升了代码的可测试性、可维护性和模块化程度,广泛应用于Web服务、微服务架构和后台管理系统等场景。Spring ApplicationContext作为IoC容器的高级实现,不仅提供了基础的Bean管理,还集成了国际化、事件发布、资源加载等企业级服务。理解其生命周期,尤其是refresh() 阅读详情

ApplicationContext

spring中的对象实例课通过ApplicationContext获得。

通过下面代码获得对象实例(必须先通过xml文件定义)
如下面例子

//主函数
public class StudentExample {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("BeanConfig-lab2.xml");
        StudentBean student=(StudentBean)context.getBean("studentbean");
    }
}

//StudentBean类
public class StudentBean {

    private String name;
    private int age;

    public void init()
    {
        this.age=18;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}
//xml配置文件
<beans>
//init-method可指定对象的初始化方法
<bean id="studentbean" class="com.cst.spring.lab2.StudentBean" init-method="init">
        //这里的name与setName对应
        <property name="name">
            <value>tom</value>
        </property>
    </bean>
</beans>

关于bean的配置不仅限与上述配置,还有许多高级配置,比如。
需实例对象中对另外的对象有依赖。

ref beaf="xxx"

表示引用一个id或name,这个bean可以在同一
个xml文件中,也可以不在当前xml文件中;不在同一文件中,使用
import来引入其他配置文件;

ref local="xxx"

表示引用当前xml 的bean

<bean class="java.unit.Date">

使用内部Bean,不需要id,只能在此处使用
对于数组、List、Set、Map等集合对象,在注入前必须填充入一些对象至集合中,然后将集合对象注入到所需的Bean,也可以由IoC容器来完成集合对象的注入;

对于数组或List类型的依赖注入,在定义文件中使用标签;对于Map类型,使用标签,但要用表示key。对于Set类型,使用标签;

若要注入的是properties类型,使用标签

事件监听器

在Spring应用程序执行期间,ApplicationContext本身就会发布一连串的事件,这些事件都是抽象类ApplicationEvent的子类,如果对事件感兴趣,实现接口ApplicationListener,并在定义文件中定义实现该接口的一个Bean实例。

如下面实现ApplicationListener接口的一个类用于监控学生年龄:

public class AgeListener implements ApplicationListener{

    public void onApplicationEvent(ApplicationEvent arg0) {
        // TODO Auto-generated method stub
        if(arg0 instanceof AgeEvent) {
            AgeEvent age=(AgeEvent)arg0;
            StudentBean student=age.getStudent();
            if(student.getAge()<16||student.getAge()>21)
            {
                System.out.println("学生年龄不在有效范围");
            }
            else
                System.out.println("监听器已启用,年龄在有效范围");
        }
    }

}

再实现一个事件类AppliationEvent

public class AgeEvent extends ApplicationEvent{

    private StudentBean student;

    public AgeEvent(StudentBean student) {
        super(student);
        // TODO Auto-generated constructor stub
        this.student=student;
    }

    public StudentBean getStudent()
    {
        return this.student;
    }
}

在主函数内发布事件

public class StudentExample {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("BeanConfig-lab2.xml");
        StudentBean student=(StudentBean)context.getBean("studentbean");
        context.publishEvent(new AgeEvent(student));
    }
}

国际化消息

ApplicationContext继承接口org.springframework.context.MessageSource接口,使用getMessage()获得文字消息,从而实现国际化消息的目的。

如下:

//先在属性文件msg_en_US.properties和msg_zh_CN.properties定义国际化资源

studentinfo=this student name is {0}  and age is {1}
//中文编码
studentinfo=\u8FD9\u4E2A\u5B66\u751F\u7684\u540D\u5B57\u662F {0}  \u5E74\u9F84\u662F {1}

//在配置文件中实现bean
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="msg"/>
</bean>

//主函数中定义输出
public class StudentExample {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("BeanConfig-lab2.xml");
        StudentBean student=(StudentBean)context.getBean("studentbean");

        //为属性文件中的{0},{1}提供值
        Object[] obj=new Object[]{student.getName(),String.valueOf(student.getAge())};

    //输出国际化消息   System.out.println(context.getMessage("studentinfo",obj,Locale.CHINA));
    System.out.println(context.getMessage("studentinfo",obj,Locale.US));
    }
}

以上便是本文的全部内容,有什么问题请指正。谢谢

spring框架学习 - spring IoC 之 注册 LoadTimeWeaver 及 ApplicationContext 的附加功能 接上一篇博客:https://blog.youkuaiyun.com/qq_43605444/article/details/121990016?spm=1001.2014.3001.5502 15、注册 LoadTimeWeaver Spring 使用 LoadTimeWeaver 在类加载到 Java 虚拟机 (JVM) 时对其进行动态转换。 要启用加载时织入,您可以将 @EnableLoadTimeWeaving 添加到您的 @Configuration 类之一,如以下示例所示: @Configuration @ 阅读详情

相关推荐

模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

整理的算法模板合集: ACM模板 目录一、树的直径树形DP两次DFS / BFS(找到直径的两个端点)二、动态修改树的边权并求每个时刻的直径(线段树)三、树的重心 一、树的直径 树的直径满足如下性质: 若有多条直径,则所有的直径之间皆有公共点。 直径的两端一定是叶子。 树中距离某一直径端点最远的点,至少有一个是该直径的另一个端点。 对于树上任意一个点,与之距离最远的一个点,至少有一个直径的端点。 给你一个无权无向的树。编写程序以输出该树中最长路径(从一个节点到另一个节点)的长度。在这

繁凡さん的博客 1679

Spring源码系列:ApplicationContext的详解

在之前的文章中,我们已经对Spring源码中的一些核心概念进行了分析。由于篇幅限制,我们并没有详细解释ApplicationContext类所继承的父接口及其作用。因此,本文将单独为ApplicationContext进行详细说明,包括其继承的父接口及其作用。

2301_76607156的博客 659

驯服电源尖峰:从BUCK/BOOST环路剖析到高di/dt噪声的实战抑制

本文深入探讨了电源系统中高di/dt噪声的产生机制及抑制方法,通过BUCK/BOOST电路的环路分析,揭示了电流路径不连续导致的电压尖峰问题。文章提供了实用的PCB布局技巧和噪声抑制策略,包括最短回路原则、铺铜优化和过孔阵列战术,帮助工程师有效降低EMI噪声,提升电源系统的稳定性。

weixin_29587015的博客 275

Spring使用指南 ~ 4、ApplicationContext 配置详解

Spring 使用指南

戴泽王的博客 2189

Time-Interleaved Analog-to-Digital Converters

  这篇论文提供了时间交错模数转换器的教程回顾。在解释了偏置、增益、定时和其他不匹配对变换器性能的影响后,给出了目前解决不匹配问题的方法。论文最后总结了时间交错模数转换器的现状。 1.简介   时间交错模数转换器(ADC)将多个子ADC组合成一个ADC系统,可以实现比单独的子ADC[1]更快的采样速率。历史上,时间交错adc的主要缺点是需要紧密匹配子adc[2]的特性。近年来,由于应用需要非常宽带信号的数字化、功率高效子adc的可用性以及由深亚微米互补金属氧化物硅(CMOS)技术实现的微调技术,使得时间交错

weixin_44537056的博客 6733

LangChain与LangGraph核心区别解析

LangChain与LangGraph是当前大语言模型(LLM)应用开发中两个紧密相关且极具影响力的开源框架。它们源于LangChain AI公司,设计哲学互补,旨在解决不同维度的LLM工程化问题,共同构成了构建复杂智能应用的强大工具集。

weixin_35774598的博客 1930

Spring学习

3). Application比BeanFactory多点啥。1). 到底什么是BeanFactory。2). BeanFactory能干啥。

qq_45891099的博客 514

《2026国赛命题趋势前瞻:从近年真题看今年高教社杯的三大热点方向》

距离2026年“高教社杯”全国大学生数学建模竞赛,只剩下不到一个月的时间。如果你还在盲目刷往年真题,如果你还在死磕传统的微分方程和线性规划,如果你还在用五年前的论文模板——那么很遗憾,你很可能已经在起跑线上落后了。这不是危言耸听。过去三年,国赛的命题风格发生了肉眼可见的剧变。国赛正在从“数学技巧比拼”全面转向“数据科学能力+工程落地思维”的综合较量。2026年,恰逢国赛创办第35周年。在这个特殊的节点,命题会走向何方?哪些方向会大概率成为今年的“爆点”?

YOLO 23

BeanFactory和ApplicationContext的区别

BeanFactory和ApplicationContext的区别   描述   BeanFactory: 是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;   ApplicationContext: 应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能; 1) 国际化(Messag...

yjc0403的博客 3030

ESD防护设计宝典(二十三):ESD与EOS失效差异分析

ESD和EOS是电子制造业面临的两大挑战,随着电子产品向更高集成度、更低工作电压和更高工作频率发展,这一问题将更加突出。根据美国军方上世纪八十年代与可靠性分析中心(RAC)共同建立的现场失效返回程序(FFRP)统计数据,产品现场返回中EOS占比高达46%,而ESD仅占6%,另有6%的案例难以区分是EOS还是ESD。

m0_56451176的博客 322

4.DJI-PSDK云台x-port控制:

使用PSDK 的“云台控制”功能,开发者需要先设计负载设备的云台并开发出控制云台的程序,将云台的控制函数注册到PSDK 指定的接口后,用户通过使用DJI Pilot、基于MSDK 开发的移动端App 及遥控器即可控制基于PSDK 开发的具有云台功能的负载设备,同时获得负载设备的相关信息,如姿态等。云台的姿态如 图2.云台姿态 所示,根据用户的控制指令,云台能够调整姿态;云台的关节如 图1.云台关节 所示,云台关节是云台上带动负载设备转动的结构件:云台电机,云台关节角即云台电机转动的角度。

哒宰的博客 859

Spring+Spring MVC+MyBatis 开发知识点

Java EE企业级应用开发教程知识点

Rourf的博客 1267

CARAFE轻量级上采样算子详解:从原理到YOLOv5/YOLOv8实战魔改全攻略

摘要: 本文探讨了CARAFE(内容感知特征重组)上采样算子在YOLOv5/YOLOv8目标检测模型中的应用。传统上采样方法(如最近邻插值)易丢失细节信息,而CARAFE通过内容自适应机制和大感受野特性,动态生成上采样核,显著提升小目标检测性能。文章详细解析了CARAFE的算法原理(核生成与特征重组两步),并提供了在YOLOv5/YOLOv8中集成的代码实现与配置修改方案。实验表明,引入CARAFE后模型mAP提升约0.6%,且保持轻量级优势。此外,文中还总结了训练调优技巧、部署优化方案及常见问题解决方法,

FJN110的博客 920

BeanFactory 和 ApplicationContext的区别

​​​​​​注:ApplicationContext会预先的将bean的定义加载和创建完成,如果注入不成功,会抛异常,BeanFacotry,等着调用getBean()方法的时候,才报异常。 BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化。 BeanFactory 还能在实例...

福贵儿的博客 1630

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SPRING源码5.0:容器的功能扩展BeanFactoryPostProcessor

BeanFactory的后处理 BeanFactory作为Spring中容器功能的基础,用于存放所有已经加载的bean,为了保证程序上的高可扩展性,SPring针对BeanFactory做了大量的扩展,如PostProcessor等就是在在此实现的。 激活注册的BeanFactoryPostProcessor BeanFactoryPostProcessor接口同BeanPostProcessor...

weixin_37571795的博客 282

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spring读书笔记-----使用Spring容器(二)

一、使用ApplicationContext 前面介绍了,我们一般不会使用BeanFactory实例作为Spring容器,而是使用ApplicationContext实例作为容器,它增强了BeanFactory的功能。 ApplicationContext允许以声明式方式操作容器,无须手动创建它。在Web应用启动时自动创建ApplicationContext。当然,也可以采用编程方式创建...

chenssy 的技术博客 343

Spring启动初始化过程

一、Spring 容器高层视图 Spring启动的时候会读取应用程序提供的Bean配置信息,并在Spring容器生成一份相应的Bean注册表,根据这张注册表实例化Bean,装配好Bean之间的依赖关系,为上层应用提供准备的运行环境。 ...

qq_58746475的博客 2604

Spring 容器启动时所执行的各项操作

Spring 容器启动时所执行的各项操作 Spring 中的 AbstractApplicationContext 是 ApplicationContext 的抽象实现类,该实现类的 refresh() 方法定义了 Spring 容器在加载配置文件后的各项处理过程,这些处理过程氢气的刻画了 Spring 容器启动时所执行的各项操作。下面来看下 refresh() 内部定义了哪些执行逻辑。 ...

我的博客 1298

spring 内部工作机制(一)

Spring内部机制的内容较多,所以打算多分几个阶段来写。 本章仅探索Spring容器启动做了哪些事; 前言: 都说Spring容器就像一台构造精妙的机器,此话一点不假,我们通过配置文件向机器传达控制信息,机器就能够按照设定的模式工作。 如果我们将Spring容器比喻为一辆汽车,可以将BeanFactory看成汽车的发动机,而ApplicationContext则是整辆汽车,它不但包括发动...

weixin_30237281的博客 152

Spring_4

Spring容器内部工作机制 Spring的AbstractApplicationContext是ApplicationContext抽象实现类,该抽象类的refresh()方法定义了Spring容器在加载配置文件后的各项处理过程。 refresh()内部定义的执行逻辑 //初始化BeanFactory:根据配置文件实例化BeanFactory,getBeanFactory()方法由具体子类...

forever 156

Spring IoC容器:ApplicationContext的额外功能

Spring IoC容器:ApplicationContext的额外功能

听海边涛声 1114

Java Spring 的 ApplicationContext - 核心接口

提供了多个扩展点,允许你自定义 Spring 容器的行为。例如,你可以实现接口来修改 Bean 的定义,或者实现接口来监听并处理 Spring 容器发布的事件。是 Spring 框架中一个核心且功能丰富的接口,它提供了对 IoC 容器的全面管理和配置能力。通过,你可以方便地实例化、配置和组装应用中的 Bean,同时利用它提供的国际化支持、事件发布、资源加载等功能来增强应用的功能和可维护性。掌握的使用对于深入理解 Spring 框架和构建高效、可扩展的 Java 应用至关重要。

编程小弟的博客 1462

Spring应用上下文 ApplicationContext

Spring 应用上下文 ApplicationContext 前面一系列文章都是围绕 BeanFactory 进行分析的,BeanFactory 是 Spring 底层 IoC 容器的实现,完成了 IoC 容器的基本功能。在实际的应用场景中,BeanFactory 容器有点简单,它并不适用于生产环境,我们通常会选择 ApplicationContext。ApplicationContext 就是大名鼎鼎的 Spring 应用上下文,它不仅继承了 BeanFactory 体系,还提供更加高级的功能,更加适

javalingyu的博客 2738

Spring中的ApplicationContext

Spring中的ApplicationContext 1、ApplicationContext应用程序上下文 ApplicationContext是最常用的Spring ioc容器,他实现了很多接口: BeanFactory:Spring 管理 Bean 的顶层接口,我们可以认为他是一个简易版的 Spring 容器。 ApplicationEventPublisher:用于封装事件发布功能的接口,向事件监听器(Listener)发送事件消息。 ResourceLoader:Spring 加载资源的顶层接口

cgl_dong的博客 503

Spring IoC之ApplicationContext

文章目录概述ApplicationContextApplicationContext 的子接口WebApplicationContextConfigurableApplicationContextConfigurableWebApplicationContextClassPathXmlApplicationContextMessageSourceApplicationEventPublisherR...

Herishwater的博客 534

applicationcontext获取bean_Spring IoC之ApplicationContext

概述在 Spring之IoC理论一章中提到关于 IoC 的学习主要涉及到五大模块,从 Resource 和 ResourceLoader 用于资源管理开始,然后讲述 BeanDefinitionReader 如何将 Resource 转换为 IoC 容器独特的数据存储对象:BeanDefinition,紧接着又介绍了 BeanFactory 是如何实现 getBean()方法来获取 bean 实...

weixin_39843782的博客 826
上一篇: 如何判断一个二叉树是否为平衡二叉树。
下一篇: Spring学习:AOP思想
cst_code
博客等级 码龄10年 4粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值