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 ...
随机推荐
- 10-js对象、数组
# js对象 ```1.使用原始的方式创建内置对象 var myObject = new Object(); myObject.name = “lijie”; myObject.age = 20; m ...
- File基本操作
File (1)File是文件和目录路径名的抽象表示.IO流操作中大部分都是对文件的操作,因此Java就提供了File类供我们来操作文件. (2)构造方法 根据一个路径得到一个File对象 ...
- VMWare15 安装 Mac OS 系统
文章目录VMWare15 安装 Mac OS 系统安装环境工具准备准备工作MAC虚拟机设置启动MAC前准备工作安装系统安装VMware Tool注意事项参考链接安装环境WIN10VMware Work ...
- 两台服务器共享文件Windows和Linux
最近遇到一个问题,新装的两台服务器死活就是挂载不上samba服务器上的文件,在输入mount挂载命令的时候提示只读什么的,尝试了在挂载的时候用只读的方式去挂载也是不行,最终发现了,缺少安装cifs包, ...
- CA认证机制的简明解释
公钥机制面临的问题: 假冒身份发布公钥! 可以用CA来认证公钥的身份.CA有点像公安局,公钥就像身份证.公安局可以向任何合法用户颁发身份证以证明其合法身份.第三方只要识别身份证的真伪就能判断身份证持有 ...
- python基础--文件的操作
#r w a 文件读取操作 默认打开为读操作 #f=open('coldplay.txt','r',encoding="utf-8")#open函数默认已系统编码方式打开windo ...
- postgresql windows 服务启动失败
1命令行 启动服务 pg_ctl -D "C:\Program Files\PostgreSQL\9.1\data" start 2 查看状态 pg_ctl -D "C: ...
- php7 mysqli连接mysql的几种方式
一.过程是方法 function connect(){ static $conn; if(!$conn){ $conn = mysqli_connect(DB_HOST,DB_USER,DB_PWD) ...
- 自定义日志注解 + AOP实现记录操作日志
需求:系统中经常需要记录员工的操作日志和用户的活动日志,简单的做法在每个需要的方法中进行日志保存操作, 但这样对业务代码入侵性太大,下面就结合AOP和自定义日志注解实现更方便的日志记录 首先看 ...
- 对Kubernetes的研究
服务发现和负载平衡 自动包装 存储编排 自愈 自动部署和回滚 秘密和配置管理 批量执行 水平缩放 是一个对docer进行管理的平台.