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 @ 阅读详情

相关推荐

团结引擎+OpenHarmony 记录 (持续更新中)

获取不到的原因是因为二者不在同一个线程中,所以数据没有同步。而 globalThis.context 数据进行了同步。(TuanjieMainWorkerHandler.ts中可以看到)在进行绘制 UI 的时候 ,如果组件有 Native API 就可能不会显示出来,例如 web 控件就不能展示出来,刚加上权限的时候 会报错 因为缺少 reason ,添加上就不会报错了。只有纯 UI 控件是可以展示出来的,注释掉 web控件后就可以。

m_cainiaokuaifei的博客 1492

Spring源码系列:ApplicationContext的详解

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

2301_76607156的博客 659

从零到一:揭秘BlueROV2机械爪背后的Pixhawk舵机控制艺术

本文详细解析了如何基于Pixhawk飞控系统为BlueROV2水下机器人构建可靠的舵机控制系统。从硬件选型、ArduSub固件配置到供电安全与故障排除,全面揭秘机械爪背后的控制艺术,为水下机器人爱好者提供实用指南。

ol78901234的博客 244

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

Spring 使用指南

戴泽王的博客 2189

扬声器设计避坑指南:用Comsol分析反电动势对THD的影响(附案例文件)

本文深入探讨了扬声器设计中反电动势对总谐波失真的关键影响。通过COMSOL仿真,详细分析了BL值非线性、音圈电感变化等电磁-力-声耦合机制,并提供了从参数化建模到系统级优化的实战指南,帮助工程师精准量化并降低谐波失真,提升扬声器音质。

xx56789的博客 525

AD20/Altium designer——如何进行DRC检查、冲突的错误如何改正

对于一个画完的PCB,我们常常需要进行DRC检查,确保板子的电器连接及制作工艺在设定规则的范围内,本篇将介绍如何对PCB进行后期DRC检查处理,确保电路板出现不必要错误。 1.DRC检查入口 2.DRC设置 3.错误分析 对于错误的内容,依据个人实际情况不同,其出现的原因都是因为与设计规则中的设定标准冲突,这里按遇到的错误进行修改讲解,其他错误同理。 4.常见错误分析及解决方法 (1) 解决方法:将未连接网络连接(...

嵌入式创客工坊的博客 5万+

Spring学习

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

qq_45891099的博客 514

Python爬虫实战:基于Scrapy与Playwright高效爬取人民网新闻数据

本文将详细介绍如何使用Python最新技术栈(Scrapy框架结合Playwright浏览器自动化工具)高效爬取人民网新闻数据。文章包含完整项目搭建、反反爬策略、数据解析存储以及性能优化等核心内容,提供可直接运行的代码示例,适合中高级Python开发者学习现代网络爬虫开发技术。python# 去除特殊空白字符。

2201_76125261的博客 1122

BeanFactory和ApplicationContext的区别

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

yjc0403的博客 3030

SQL中的时间计算:员工每日工作时长

摘要:本文介绍了一个使用SQL查询计算员工每日工作时长的实用方法。通过分析包含员工打卡记录的数据库表,利用CTE(公共表表达式)将日期分组,计算最早和最晚打卡时间差,最终以"小时:分钟"格式输出工作时长。该方法适用于每日两次打卡的场景,并提示了处理漏打卡等特殊情况时的注意事项,为企业考勤管理提供了有效的数据支持方案。(148字)

m0_74337424的博客 413

一文讲透 SAP VDM 命名里的前缀与后缀:看懂 I_、C_、A_,把 CDS 视图栈搭得又稳又好用

SAP S/4HANA 的 CDS 视图命名规范解析 摘要:本文详细解析 SAP S/4HANA 中 CDS 视图的 VDM 命名规范。通过前缀(如 I_、C_、R_)区分视图层级,后缀标记附加角色,结合 @VDM.viewType 注解形成完整语义体系。I_作为稳定接口层,C_面向特定场景裁剪,R_限定应用域内复用,A_提供远程 API 接口。命名规范使团队能快速识别视图用途、依赖关系和扩展边界,确保模型长期可维护性。文章结合制造业物料主数据、Fiori 应用等实际案例,说明如何通过规范命名构建清晰的视图

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

Spring+Spring MVC+MyBatis 开发知识点

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

Rourf的博客 1267

时间加强控制图,累计和控制图详细介绍,公式,计算 UCL,LCL,CL, sigma,C#实现

\(k\):参考值(通常取为检测偏移量的一半,例如 \(k = \frac{\delta \sigma}{2}\),\(\delta\)是希望检测的偏移量,\(\sigma\)是过程标准差)。- 示例中假设目标均值 \(\mu_0 = 10.0\),标准差 \(\sigma = 0.5\),参考值 \(k = 0.25\)(检测1σ偏移),控制限常数 \(h = 4\)。例如,若希望检测1个标准差的偏移(\(\delta = 1\)),则 \(k = 0.5\sigma\)。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 820

BeanFactory 和 ApplicationContext的区别

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

福贵儿的博客 1630

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

weixin_37571795的博客 282

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

chenssy 的技术博客 343

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启动初始化过程

一、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、付费专栏及课程。

余额充值