Spring基本用法2——使用Spring容器(ApplicationContext)
前言:Spring有两个核心接口(BeanFactory和ApplicationContext),其中ApplicationContext是BeanFactory的子接口,它们都可以代表Spring容器,而Spring容器就是生成Bean实例的工厂,并管理容器中的Bean。而ApplicationContext作为功能更强大的Spring容器,提供了诸如资源访问(URL和文件)、事件机制、同时加载多个配置文件、国际化支持等扩展功能。因此,本文介绍在项目中常用到的功能模块
本篇文章重点关注以下问题:
- ApplicationContext的国际化支持
- ApplicationContext的事件机制
- 在Bean中获取Spring容器
1. ApplicationContext的国际化支持
ApplicationContext接口继承了MessageSource接口,因此具备了国际化功能。下面是MessageSource接口中定义的三个用于国际化的方法:
public interface MessageSource { /** * 尝试解析国际化信息,如果为找到相关国际化配置,则返回默认信息 * @param code 待国际化信息在配置文件中的关键字 * @param args 待国际化信息中占位符的值 * @param defaultMessage 查找国家化配置失败后的默认返回值 * @param locale Locale信息 * @return */ String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale); /** * 尝试解析国际化信息,如果为找到相关国际化配置,则返回null * @param code 待国际化信息在配置文件中的关键字 * @param args 待国际化信息中占位符的值 * @param locale Locale信息 * @return */ String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException; /** * 以国际化解析器进行国际化 * @param resolvable 国际化解析接口 * @param locale Locale信息 * @return */ String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException; }
1.1 在Spring中配置MessageSource的Bean:通常使用ResourceBundleMessageSource类
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!-- 驱动Spring调用messageSource Bean的setBasenames()方法,该方法需要一个数组参数,使用list元素配置多个数组元素 --> <property name="basenames"> <list> <value>com/wj/chapter2/applicationContextg/i18/message</value> <!-- 如果有多个资源文件,全部列在此处 --> </list> </property> </bean> </beans>上面配置文件中的粗体字只指定了一份国际化资源文件,其baseName是message,然后给出它的两份资源文件:message_en_US.properties、message_zh_CN.properties。
相关推荐
YClimb 2020-09-15
amazingbo 2020-08-16
CyborgLin 2020-08-15
一叶不知秋 2020-07-09
啸林 2020-07-04
magicandy 2020-06-16
鲁氏汤包王 2020-06-08
YEEHOLIC 2020-06-03
晨曦之星 2020-05-29
paopao00 2020-05-20
czsay 2020-05-20
cwgxiaoguizi 2020-05-19
Yasin 2020-05-06
loviezhang 2020-05-03
FellowYourHeart 2020-04-23
东方咖啡屋 2020-04-19