zoukankan      html  css  js  c++  java
  • spring-第二篇ApplicationContext国际化及事件机制

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

          运行检查结果:

  • 相关阅读:
    Funny Car Racing
    [LDUoj 倍增] 题解
    [HDU7073] Integers Have Friends 2.0 -随机大法好
    【spring】全局异常 globalexception 处理
    【maven】测试
    【spring】spring aop
    jvm常用排错命令
    idea tools
    idea插件
    【maven】搭建maven私服--基于CentOS7.6+docker
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/11335529.html
Copyright © 2011-2022 走看看