spring-第二篇ApplicationContext国际化及事件机制
1、ApplicationContext接口获取spring容器
ApplicationContext是BeanFactory接口的子接口,BeanFactory的常用实现类是DefaultListablebBeanFactory。
实例化BeanFactory常用的方式:
1> 第一种
//搜索类加载路径下的beans.xml文件创建Resource对象 Resource isr=new ClassPathResource("beans.xml"); //创建默认的BeanFactory容器 DefaultListableBeanFactory beanFactory=new DefaultListableBeanFactory(); //让默认的BeanFactory容器加载isr对应的XML配置文件 new XmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(isr);
2> 第二种
//搜索类加载路径下的beans.xml文件创建Resource对象 Resource isr=new FileSystemResource("beans.xml"); //创建默认的BeanFactory容器 DefaultListableBeanFactory beanFactory=new DefaultListableBeanFactory(); //让默认的BeanFactory容器加载isr对应的XML配置文件 new XmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(isr);
如果需要加载多个配置文件来创建spring容器,则应该使用BeanFactory的子接口ApplicationContext来创建BeanFactory的实例。
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml","service.xml");
或
ApplicationContext ctx=new FileSystemXmlApplicationContext("beans.xml","service.xml");
ApplicationContext是spring容器最常用的接口,该接口常用的实现类有:
1》ClassPathXmlApplicationContext:从类加载路径下搜索配置文件,并根据配置文件创建spring容器
2》FileSystemXmlApplicationContext:从文件系统的相对路径或绝对路径下去搜索配置文件,并根据配置文件创建spring容器
3》AnnotationConfigApplicationCotext:常用于注解方式
4》XmlWebApplicationContext:常用于Web应用中
5》ApplicationConfigWebApplicationContext:常用于Web应用中
ApplicationContext默认会初始化所有的singleton bean(单例bean),预初始化的时机就是ApplicationContext创建spring容器的时候,可以通过配置取消与初始化功能,如在<bean.../>元素指定lazy-init="true",该属性用于阻止容器预初始化该bean。BeanFactory则不会预初始化singleton bean。ApplicationContext继承MessageSource,因此支持国际化功能。
2、ApplicationContext的国际化支持
两个MessageSource接口中定义的方法:
1》String getMessage(String code,Object[] args,Locale loc)
2》String getMessage(String code,Object[] args,String default,Locale loc)
当程序创建ApplicationContext容器的时候,spring自动查找配置文件中名为messageSource的bean实例。一旦找到该bean,上述两个方法的调用就会委托给该messageSourfe bean。如果没有找到该bean,AplicationContext会查找其父容器中的messageSource bean;如果找到,它将作为messageSource bean使用。如果没有找到messageSource bean,系统将创建一个空的StaticMessageSource bean,该bean能接受上述两个方法的调用。
在spring中配置messageSource bean时通常使用ResourceBundleMessageSource类。例如如下简单例子:
beans.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- spring配置文件的根元素,使用spring-beans-4.0.xsd语义约束 --> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"><bean id="messageSource"class="org.springframework.context.support.ResourceBundleMessageSource"><!-- 驱动spring调用messageSource bean的setBasenames()方法,该方法需要一个数组参数,使用list元素配置多个数组元素 --><property name="basenames"><list><value>message</value><!-- 如果有多个资源文件,全部列在此处 --></list></property></bean> </beans>
message_en_US.properties
hello=welcome,{0} now=now is :{0}
message.properties
hello=欢迎你,{0} now=现在时间是:{0}
由于message.properties中包含非西欧文字,中文字符在运行过程当中可能会出现乱码,所以使用natice2ascii命令做转换处理。
处理完成以后,将在同目录产生一个message_zh_CN.properties文件。
编写SpringTest.java
package com.lfy.main;import java.util.Date; import java.util.Locale;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringTest { public static void main(String[] args){ ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml"); String hello=ctx.getMessage("hello",new String[] {"孙悟空"}, Locale.getDefault(Locale.Category.FORMAT)); String now=ctx.getMessage("now",new Object[] {new Date()},Locale.getDefault(Locale.Category.FORMAT)); System.out.println(hello); System.out.println(now); } }
运行检查结果:
转载于:https://www.cnblogs.com/ZeroMZ/p/11335529.html
spring-第二篇ApplicationContext国际化及事件机制相关推荐
- spring boot 源码分析(七) 事件机制 之 SpringApplicationEvent
2019独角兽企业重金招聘Python工程师标准>>> 一.前言 前面的文章我们讲解了一下spring boot配置文件加载的相关源码分析,下面我们将从源码角度讲解一下spring ...
- 【Spring第二篇】IOC:控制反转
IOC:控制反转 什么是IOC? 举个例子,我们有一个UserDao接口类,并且有三个UserDao实现类,分别是MysqlUserDaoImpl.OracleUserDaoImpl.UserDa ...
- 初学Java ssh之Spring 第二篇
上一篇我们成功搭建好了spring开发的环境,接下来一起看看spring有什么神奇的地方吧(本人也是新手,有不太对的地方希望大神给指出便于修改呢,谢谢大家). 之前听说spring是在对xml文件的应 ...
- 聊聊、Spring 第二篇
之前写了一篇<Spring环境搭建一>,感觉写的很烂,也许是时间有限,写的很急.今天我想再写写 Spring 的环境搭建,因为 Spring 的模块是可以单独拿出来用的,所以有很多的模块不 ...
- SSH框架之Spring第二篇
1.1 基于注解的IOC配置既注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合.只是配置的形式不一样.1.2 环境搭建1.2.1 第一步:拷贝必备的jar包需要多拷贝一个spring ...
- Spring中ApplicationContext的事件机制
ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件 ...
- spring boot实战(第二篇)事件监听
前言 spring boot在启动过程中增加事件监听机制,为用户功能拓展提供极大的便利. 支持的事件类型四种 ApplicationStartedEvent ApplicationEnvironmen ...
- Spring Boot使用ApplicationEvent来实现事件发布订阅功能(美女一个都不能少,都要通知到) - 第420篇
历史文章(累计400+篇文章) <国内最全的Spring Boot系列之一> <国内最全的Spring Boot系列之二> <国内最全的Spring Boot系列之三&g ...
- 【06】Spring源码-分析篇-ApplicationContext
Spring源码篇-ApplicationContext 前面通过手写IoC,DI.AOP和Bean的配置.到最后ApplicationContext的门面处理,对于Spring相关的核心概念应该 ...
- 第五篇:Spring源码篇-ApplicationContext
Spring源码篇-ApplicationContext 前面通过手写IoC,DI.AOP和Bean的配置.到最后ApplicationContext的门面处理,对于Spring相关的核心概念应该 ...
最新文章
- ConstraintLayout 实现水平方向 权重 效果
- “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
- IDEA添加maven并添加阿里镜像
- 获取当前横竖屏_Chrome扩展程序一键生成网页骨架屏
- C#程序只允许运行一个实例的解决方案
- win7与linux共享文件夹共享,Ubuntu+Win7+Samba实现文件共享
- 小学经历——我家有猪
- Pytorch(4)-模型保存-载入-eval()
- md5加密解密代码_Python内置方法实现基于秘钥的信息加解密
- 大学计算机四级报名,2016下半年安徽理工大学计算机四级报名
- div加border样式
- 二叉树层级打印(分层次和不分层次)
- [Java] 集合类(List、Set、Map的基本使用)
- Atitit index threod type 索引原理与类型 种类 目录 1.1. 每个文档在经过底层的存储引擎持久化后	1 2. MongoDB索引类型	2 2.1. 包括单字段索引、复合索引
- 在HFSS中用vbs脚本跑马灯?
- 《Java就业培训教程》_张孝祥_书内源码_11
- 老司机多年BT下载软件-这些下载神器你都用过吗
- python黑帽子学习
- unity粒子特效附上贴图后播放动画
- 《哲学与人生》的读书札记
热门文章
- 管理新语:主管不要当传声筒,要检查、核实
- 全网首发:GB18030制定者站出来,$为什么要显示为¥,给大家解释一下
- 冒烟测试正确名称是踩雷测试,雷区测试
- 晶体管制程极限之后,多层CPU是否可能?
- The NVIDIA driver on your system is too old (found version 9000).
- LINUX下,ffmpeg增加NVIDIA硬件编解码的步骤及解决办法
- VS error C2471: 无法更新程序数据库vc90.pdb的解决办法
- 给LINUX添加一个开机执行脚本
- android 系统宏定义,Android.mk宏定义demo【转】
- python笔记图片_python功能笔记——图像处理