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);
} }
运行检查结果:

spring-第二篇ApplicationContext国际化及事件机制的更多相关文章
- Spring第二篇和第三篇的补充【JavaConfig配置、c名称空间、装载集合、JavaConfig与XML组合】
前言 在写完Spring第二和第三篇后,去读了Spring In Action这本书-发现有知识点要补充,知识点跨越了第二和第三篇,因此专门再开一篇博文来写- 通过java代码配置bean 由于Spr ...
- Spring第二篇【Core模块之快速入门、bean创建细节、创建对象】
前言 上篇Spring博文主要引出了为啥我们需要使用Spring框架,以及大致了解了Spring是分为六大模块的-.本博文主要讲解Spring的core模块! 搭建配置环境 引入jar包 本博文主要是 ...
- 初学Java ssh之Spring 第二篇
上一篇我们成功搭建好了spring开发的环境,接下来一起看看spring有什么神奇的地方吧(本人也是新手,有不太对的地方希望大神给指出便于修改呢,谢谢大家). 之前听说spring是在对xml文件的应 ...
- 聊聊、Spring 第二篇
之前写了一篇<Spring环境搭建一>,感觉写的很烂,也许是时间有限,写的很急.今天我想再写写 Spring 的环境搭建,因为 Spring 的模块是可以单独拿出来用的,所以有很多的模块不 ...
- Spring Data JPA 整合Spring 第二篇
主要是在CustomerDao中去写一些代码,在调用Query中去用SQL 例如 public interface CustomerDao extends JpaRepository<Custo ...
- spring第二篇
上次写到spring是什么,说了很多的废话,那么从现在起 来看看spring如何使用 写几个例子 1 如何使用 spring 1.1导包 在导入四个包的基础上再导入日志包总共六个包 如下图 1.2 ...
- SSH框架之Spring第二篇
1.1 基于注解的IOC配置 既注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合.只是配置的形式不一样. 1.2 环境搭建 1.2.1 第一步:拷贝必备的jar包 需要多拷贝一个sp ...
- javaWeb技术第二篇之CSS、事件和案例
<!--内联式 CSS (层叠样式表) 编辑 层叠样式表(英文全称:Cascading Style Sheets) CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式 ...
- 【第二篇】学习 android 事件总线androidEventbus之异步事件的传递
1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过 postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().p ...
随机推荐
- PHP Web Server 实例
通过WebService,我们可以调用部署在其它地方的程序,而不用关心被调用的程序是在什么平台用什么语言编写的.这里我们使用php调用. 在php4时代调用WebService大部分使用的nusoap ...
- Tcp客户端构建流程
tcp客户端构建流程 tcp的客户端要比服务器端简单很多,如果说服务器端是需要自己买手机.查手机卡.设置铃声.等待别人打电话流程的话,那么客户端就只需要找一个电话亭,拿起电话拨打即可,流程要少很多 示 ...
- Codeforces Round #426 (Div. 2) - A
题目链接:http://codeforces.com/contest/834/problem/A 题意:给定4个图标,某些图标经过顺时针/逆时针旋转90°后能得到另外一些图标.现在给你开始的图标和结束 ...
- python:图片拼接
一:尺寸相同的图片拼接 import os from PIL import Image width_i = 200 height_i = 200 row_max = 3 line_max = 3 al ...
- 【leetcode】1089. Duplicate Zeros
题目如下: Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting the re ...
- Java浏览器弹出下载框,多个文件导出压缩包
项目里一直有这个功能,也一直没怎么注意,今天研究了一下 依据逻辑往下走: 首先是要下载的ajax的Java方法,只有返回值需要设定一下,其他的不用管: Map<String, Object> ...
- map接口详解
1.Map接口详解(1)映射(map)是一个存储键.键值对的对象,给定一个键,可以查询得到它的值,键和值都可以是对象(2)键必须是唯一的,值可以重复(Map接口映射唯一的键到值)(3)有些映射可以接收 ...
- Linux下安装Harbor 1.8.0 仓库的安装和使用(亲测)
根据Harbor官方描述: Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docker Distri ...
- CentOS 7.5 通过kubeadm部署k8s-1.15.0
kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验k ...
- NOIp 基础数论知识点总结
推荐阅读 NOIp 数学知识点总结: https://www.cnblogs.com/greyqz/p/maths.html Basic 常用素数表:https://www.cnblogs.com/g ...