1、ApplicationContext接口获取spring容器

     ApplicationContextBeanFactory接口的子接口,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国际化及事件机制相关推荐

  1. spring boot 源码分析(七) 事件机制 之 SpringApplicationEvent

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 前面的文章我们讲解了一下spring boot配置文件加载的相关源码分析,下面我们将从源码角度讲解一下spring  ...

  2. 【Spring第二篇】IOC:控制反转

    IOC:控制反转 什么是IOC? ​ 举个例子,我们有一个UserDao接口类,并且有三个UserDao实现类,分别是MysqlUserDaoImpl.OracleUserDaoImpl.UserDa ...

  3. 初学Java ssh之Spring 第二篇

    上一篇我们成功搭建好了spring开发的环境,接下来一起看看spring有什么神奇的地方吧(本人也是新手,有不太对的地方希望大神给指出便于修改呢,谢谢大家). 之前听说spring是在对xml文件的应 ...

  4. 聊聊、Spring 第二篇

    之前写了一篇<Spring环境搭建一>,感觉写的很烂,也许是时间有限,写的很急.今天我想再写写 Spring 的环境搭建,因为 Spring 的模块是可以单独拿出来用的,所以有很多的模块不 ...

  5. SSH框架之Spring第二篇

    1.1 基于注解的IOC配置既注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合.只是配置的形式不一样.1.2 环境搭建1.2.1 第一步:拷贝必备的jar包需要多拷贝一个spring ...

  6. Spring中ApplicationContext的事件机制

    ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件 ...

  7. spring boot实战(第二篇)事件监听

    前言 spring boot在启动过程中增加事件监听机制,为用户功能拓展提供极大的便利. 支持的事件类型四种 ApplicationStartedEvent ApplicationEnvironmen ...

  8. Spring Boot使用ApplicationEvent来实现事件发布订阅功能(美女一个都不能少,都要通知到) - 第420篇

    历史文章(累计400+篇文章) <国内最全的Spring Boot系列之一> <国内最全的Spring Boot系列之二> <国内最全的Spring Boot系列之三&g ...

  9. 【06】Spring源码-分析篇-ApplicationContext

    Spring源码篇-ApplicationContext   前面通过手写IoC,DI.AOP和Bean的配置.到最后ApplicationContext的门面处理,对于Spring相关的核心概念应该 ...

  10. 第五篇:Spring源码篇-ApplicationContext

    Spring源码篇-ApplicationContext   前面通过手写IoC,DI.AOP和Bean的配置.到最后ApplicationContext的门面处理,对于Spring相关的核心概念应该 ...

最新文章

  1. ConstraintLayout 实现水平方向 权重 效果
  2. “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  3. IDEA添加maven并添加阿里镜像
  4. 获取当前横竖屏_Chrome扩展程序一键生成网页骨架屏
  5. C#程序只允许运行一个实例的解决方案
  6. win7与linux共享文件夹共享,Ubuntu+Win7+Samba实现文件共享
  7. 小学经历——我家有猪
  8. Pytorch(4)-模型保存-载入-eval()
  9. md5加密解密代码_Python内置方法实现基于秘钥的信息加解密
  10. 大学计算机四级报名,2016下半年安徽理工大学计算机四级报名
  11. div加border样式
  12. 二叉树层级打印(分层次和不分层次)
  13. [Java] 集合类(List、Set、Map的基本使用)
  14. Atitit index threod type 索引原理与类型 种类 目录 1.1. 每个文档在经过底层的存储引擎持久化后 1 2. MongoDB索引类型 2 2.1. 包括单字段索引、复合索引
  15. 在HFSS中用vbs脚本跑马灯?
  16. 《Java就业培训教程》_张孝祥_书内源码_11
  17. 老司机多年BT下载软件-这些下载神器你都用过吗
  18. python黑帽子学习
  19. unity粒子特效附上贴图后播放动画
  20. 《哲学与人生》的读书札记

热门文章

  1. 管理新语:主管不要当传声筒,要检查、核实
  2. 全网首发:GB18030制定者站出来,$为什么要显示为¥,给大家解释一下
  3. 冒烟测试正确名称是踩雷测试,雷区测试
  4. 晶体管制程极限之后,多层CPU是否可能?
  5. The NVIDIA driver on your system is too old (found version 9000).
  6. LINUX下,ffmpeg增加NVIDIA硬件编解码的步骤及解决办法
  7. VS error C2471: 无法更新程序数据库vc90.pdb的解决办法
  8. 给LINUX添加一个开机执行脚本
  9. android 系统宏定义,Android.mk宏定义demo【转】
  10. python笔记图片_python功能笔记——图像处理