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);
} }

运行检查结果:

最新文章

  1. js控制div滚动条,滚动滚动条使div中的元素可见并居中
  2. 谈谈黑客攻防技术的成长规律(aullik5)
  3. innodb_fast_shutdown中值为1或者2的区别是?
  4. mysql 排重查询
  5. StackOverflow程序员推荐:每个程序员都应读的30本书
  6. CodeForces - 556C Case of Matryoshkas
  7. 有关CUBLAS中的矩阵乘法函数
  8. Eclipse安装教程 ——史上最详细安装Java &amp;Python教程说明
  9. P1012 拼数 字符串
  10. 连接hive
  11. SQL 同一张表中相同字段的内容合并为一条记录(不同字段的那一列每个记录后面加逗号)
  12. 多表关联查询_resultMap_集合对象
  13. Mongo 应用查询
  14. js基础-函数基础
  15. Mysql 创建表时错误:Tablespace for table `tablexx` exists. Please DISCARD the tablespace before IMPORT.
  16. [CQOI2009]DANCE跳舞(ISAP写法)
  17. NodeJS学习笔记二
  18. 新手学习Java,该从哪里学起?
  19. 自动化测试元素查找利器firepath介绍
  20. Git 提交修改

热门文章

  1. frontend-dev面试
  2. ajaxSubmit 实现图片上传 SSM maven
  3. runtime 理解笔记
  4. Docker镜像+nginx 部署 vue 项目
  5. 快速禁止Chrome浏览器缓存
  6. DispatcherServlet的工作原理
  7. voc数据集坐标,coco数据集坐标
  8. GPS通讯 数据包解析
  9. NLP第一周
  10. Task7.卷积神经网络