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 ...
随机推荐
- swift实现线程安全的栈和队列
实现一个线程安全的栈 这里使用数组来存储栈的数据.不足之处在于本例中的Stack可以无限扩容,更好的是初始化时候指定一个最大容量,防止不断扩容申请内存导致内存不够的问题.这里的线程安全使用一个串行队列 ...
- 08Servlet
1.Servlet概念 1.1 servlet的特点 1)sevlet是一个普通的java类,继承HttpServlet类. 2)其实实现了Servlet接口的java类,才是一个Servlet类. ...
- CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.ustc.edu.cn/anaconda/pkg
conda安装时一直报错,换源什么的都不好使,折腾了半天,直到看到https://blog.csdn.net/u013383596/article/details/87718472 将https改为h ...
- Python日志库logging总结
转自 https://cloud.tencent.com/developer/article/1354396 在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中 ...
- 外媒:Apple面临着印度iPhone的停用
据外媒报道:印度电信管理局(TRAI)制定遏制令人讨厌的消息的新规则可能导致印度数百万部iPhone的停用. 该监管机构本周早些时候宣布了“2018年电信商业通信客户偏好规定”,根据该规定,它已提议“ ...
- CBV和FBV
CBV和FBV 刚开始写的视图都是基于函数版本的,称为FBV,后来写了一个NB的叫CBV,就是基于类的 FBV就是在URL中的一个路径对应一个函数 urlpatterns = [ url(r'^adm ...
- hdu 5212 : Code【莫比乌斯】
题目链接 题给代码可以转化为下面的公式 然后用F[n]记录公约数为n的(a[i],a[j])对数,用f[n]记录最大公约数为n的(a[i],a[j])对数 之后枚举最大公约数d 至于求F[n],可以先 ...
- LeetCode--051--N皇后(java)-star
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解 ...
- 将HTML转IMAGE
chrome --enable-logging --headless --disable-gpu --screenshot=d:\chrome.jpg --hide-scrollbars --wind ...
- 一道装呀(状压)DP
generator 题目描述: 自己的数学太差了,居然没看出来和这两个是相同的: 啊啊啊: 所以装呀一下就好了: #include<iostream> #include<cstdio ...