使用ApplicationContext
ApplicationContext覆盖了BeanFactory的所有功能,并提供了更多的特,容器创建时就创建了singleton Bean
相对BeanFactory而言,ApplicationContext提供了以下扩展功能:
1.国际化支持:继承MessageSource接口,提供国际化支持
2.资源访问:支持对文件和URL的访问。
3.事件传播:事件传播特性为系统中状态改变时的检测提供了良好支持。
4.多实例加载:可以在同一个应用中加载多个Context实例,即加多个配置文件。
- 国际化处理的步骤
1)写相应的国家资源文件如:ApplicationResources_zh.properties,注意字符的转化类似struts的国际化
2)bean.xml 的配置
<p:bean id="messageSource " class="org.springframework.context.support.ResourceBundleMessageSource">
<p:property name="basename" value="com.kettas.spring.ioc.day3.ApplicationResource" />
</p:bean>
<p:bean id="msc" class="com.kettas.spring.ioc.day3.MessageSourceConsumer" />
</p:beans>
3)实现类MessageSourceConsumer
具体的实现类implements MessageSourceAware。注入messageSource ms得到字符:String name = ms.getMessage("name", null, Locale.CHINA);name是资源文件的key值
Locale.CHINA是中文,Locale.ENGLISH英文
- 资源访问:即外部资源文件的获取;资源文件
两种引入外部资源的方式:
①
<!-- <p:bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<p:property name="location" value="com/kettas/spring/ioc/day3/jdbc.properties"></p:property>
</p:bean> -->
②,引入解析:
xmlns:context="http://www.springframework.org/schema/context"
<context:property-placeholder location="com/kettas/spring/ioc/day3/jdbc.properties"/>
使用
jdbc.driver是资源的key值
其它:ApplicationContext.getResource方法提供了对资源文件访问支持,如:
Resource rs = ctx.getResource("classpath:config.properties");
File file = rs.getFile();
- 事件传播:事件机制是观察者模式的实现
事件框架两个重要的成员:
1)ApplicationEvent:容器事件,必须由ApplicationContext发布。
2)ApplicationListener:监听器:可有其他任何监听器bean担任。
3)ApplicationContext是事件源必须由java程序显示的触发。
1)事件流程:
2)代码实例:
1,事件源。
public class LogEventSource implements ApplicationEventPublisherAware
{
private ApplicationEventPublisher publisher;
public void setApplicationEventPublisher(ApplicationEventPublisher publisher){
this.publisher = publisher;
}
public void fireEvent(){
LogEvent evt = new LogEvent(this, "Test message");
publisher.publishEvent(evt);
}
}
2,事件监听,
public class Logger implements ApplicationListener {
private Log logger = LogFactory.getLog(Logger.class);
public void onApplicationEvent(
ApplicationEvent evt) {
logger.info("Event type: " + evt.getClass().getName());
if(evt instanceof LogEvent){
logger.info(((LogEvent)evt).getMessage());
}
}
}
3)配置文件
<p:bean id="les" class="com.kettas.spring.ioc.day3.LogEventSource"> 有相应的事件方法
</p:bean>
<p:bean class="com.kettas.spring.ioc.day3.Logger"></p:bean> 处理事件的后台
</p:beans>
说明:LogEventSourc有相应的事件方法publisher.publishEvent(evt)主动触发容器事件; Logge处理事件的后台
- 多实例加载
BeanPostProcessor bean后处理器 实现BeanPostProcessor接口 对bean实例进一步增加功能,实现两个方法processBeforeInitialization(Object bean,String name)方法(该方法的第一个参数是将进行后处理的实例bean,name是该bean的名字)和ProcessaAfterInitialization(Object bean,String name).在init()或destory之前做一些处理.Spring的工具类就是通过bean的后处理器完成的。
BeanFactoryPostProcessor 容器后处理器:实现接口BeanFactoryPostProcessor只负责处理容器本身 ,实现的方法是postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)参加资源的引入和获取,可以修改bean工厂bean的定义相当一个再配置的过程。类似BeanPostProcessor,ApplicationContext可以自动检测到容器中的容器后处理器,但是BeanFacory必须手动调用。
使用ApplicationContext的更多相关文章
- Spring获取ApplicationContext
在Spring+Struts+Hibernate中,有时需要使用到Spring上下文.项目启动时,会自动根据applicationContext配置文件初始化上下文,可以使用ApplicationCo ...
- spring applicationContext.xml和hibernate.cfg.xml设置
applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...
- spring源码:ApplicationContext的增强功能(li)
ApplicationContext作为资源加载器:ApplicationContext作为事件发布者: Java原生提供了事件发布机制------EventObject对象作为发布的事件,Event ...
- 为什么applicationContext.xml和spring-servlet.xml中都有注解过滤<context:component-scan base-package="myproject"> 和<context:component-scan base-package="myproject.controller" />
在刚学习SpringMVC框架整合时,你也许会产生疑问为什么Spring.xml和SpringMVC.xml中都有注解过滤. <context:component-scan base-packa ...
- Spring:ApplicationContext (2)
在使用Spring时,通常会配置一个applictioncontext.xml 来指定ApplicationContext的相关信息. 当使用SpringMVC时,还会再另外指定一个[server-n ...
- Spring ApplicationContext 简解
ApplicationContext是对BeanFactory的扩展,实现BeanFactory的所有功能,并添加了事件传播,国际化,资源文件处理等. configure locations:(C ...
- [Java] ApplicationContext 辅助类
我们经常需要获取各种 bean , 需要用到 context. 下面的类可以方便的使用 context , 获取 bean 等. import java.io.File; import java.ut ...
- 项目中运行报错: Loading XML bean definitions from class path resource [applicationContext.xml]
记录一下: org.springframework.context.support.AbstractApplicationContext prepareRefresh Refreshing org.s ...
- web.xml配置错误导致applicationContext.xml配置重复加载
web.xml相关配置 <context-param><param-name>log4jRefreshInterval</param-name><param- ...
- 手动获取spring的ApplicationContext和bean对象
WEB项目: 方法1: 1 ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(S ...
随机推荐
- HDU 6206 青岛网络赛1001 高精度 简单几何
给出的数据1e12规模,常规判点是否在圆范围内肯定要用到半径,求得过程中无法避免溢出,因此用JAVA自带的浮点大数运算,和个ZZ一样比赛中eclipse出现问题,而且太久没写JAVA语法都不清楚变量忘 ...
- 数组与集合List的相互转化
数组转化为集合 #此运用的是Arrays中的asList方法,返回一个List集合 *当数组元素为基本数据类型是把整个数组当作一个元素放入List集合中,代码举例: ,,}; List<int[ ...
- 51nod 1217 Minimum Modular
N个不同的数a[1],a[2]...a[n],你可以从中去掉K个数,并且找到一个正整数M,使得剩下的N - K个数,Mod M的结果各不相同,求M的最小值. Input 第1行:2个数N, K,中间用 ...
- 【NOI2017】游戏 2-sat算法
[题目]LibreOJ [题意]n场游戏,有三种车ABC,给定长度为n的字符串,'a'表示不能选A,'b''c'同理,'x'表示不限,至多d个'x'.有m个限制(i,hi,j,hj)表示如果第i场选择 ...
- mysql 使用shell时出现 ERROR 2006 (HY000): MySQL server has gone away 解决方法
ERROR (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection Current d ...
- D - Frog and Portal (利用斐波那契数列的性质)
题目链接:https://cn.vjudge.net/contest/270201#problem/D 具体思路:利用斐波那契数列的性质,斐波那契数列可以构成任何正整数,所以按照顺序减下去肯定能减到0 ...
- Mac 下安装 ruby 环境解决 brew 安装 yarn 问题
在brew安装yarn提示 ruby的版本过低.在网上搜了一下发现 1. mac下自带的ruby 在 system 目录下 2. 其实可以用brew安装一个ruby brew install ruby ...
- go标识符、变量、常量
标识符 标识符是用来表示Go中的变量名或者函数名,以字母或_开头.后可跟着字母.数字. _ 关键字 关键字是Go语言预先定义好的,有特殊含义的标识符. 变量 1. 语法:var identifier ...
- 64_t2
texlive-biblatex-chem-doc-svn42065-33.fc26.2.no..> 24-May-2017 15:44 1044190 texlive-biblatex-che ...
- 008 BlockingQueue理解
原文https://www.cnblogs.com/WangHaiMing/p/8798709.html 本篇将详细介绍BlockingQueue,以下是涉及的主要内容: BlockingQueue的 ...