【转】ServletContextAware接口
来源:互联网 发布:99乘法表java代码解析 编辑:程序博客网 时间:2024/06/01 08:14
在Spring中,凡是实现ServletContextAware接口的类,都可以取得ServletContext.
实现如下:
那么Spring是在什么时候把ServletContext放置进去的呢。
通过对Spring的学习,终于明白了。
在web项目中,Spring容器的加载是通过XmlWebApplicationContext进行的。
它的父类AbstractRefreshableWebApplicationContext,在postProcessBeanFactory方法中进行了如下操作(postProcessBeanFactory方法被AbstractApplicationContext的refresh方法调用)
代码的第一句就是添加了一个ServletContextAwareProcessor。
该类的postProcessBeforeInitialization方法如下:
而所有的BeanPostProcessor都将在AbstractAutowireCapableBeanFactory类的initializeBean方法中,通过调用applyBeanPostProcessorsBeforeInitialization方法完成所有实现BeanPostProcessor接口的postProcessBeforeInitialization的调用。
XmlWebApplicationContext使用的BeanFactory是DefaultListableBeanFactory。
DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory,因此可以完成上述操作。
实现如下:
- private ServletContext application;
- public void setServletContext(ServletContext servletContext) {
- this.application = servletContext;
- }
那么Spring是在什么时候把ServletContext放置进去的呢。
通过对Spring的学习,终于明白了。
在web项目中,Spring容器的加载是通过XmlWebApplicationContext进行的。
它的父类AbstractRefreshableWebApplicationContext,在postProcessBeanFactory方法中进行了如下操作(postProcessBeanFactory方法被AbstractApplicationContext的refresh方法调用)
- beanFactory.addBeanPostProcessor(new ServletContextAwareProcessor(this.servletContext, this.servletConfig));
- beanFactory.ignoreDependencyInterface(ServletContextAware.class);
- beanFactory.ignoreDependencyInterface(ServletConfigAware.class);
- WebApplicationContextUtils.registerWebApplicationScopes(beanFactory, this.servletContext);
- WebApplicationContextUtils.registerEnvironmentBeans(beanFactory, this.servletContext, this.servletConfig);
代码的第一句就是添加了一个ServletContextAwareProcessor。
该类的postProcessBeforeInitialization方法如下:
- public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
- if (this.servletContext != null && bean instanceof ServletContextAware) {
- ((ServletContextAware) bean).setServletContext(this.servletContext);
- }
- if (this.servletConfig != null && bean instanceof ServletConfigAware) {
- ((ServletConfigAware) bean).setServletConfig(this.servletConfig);
- }
- return bean;
- }
而所有的BeanPostProcessor都将在AbstractAutowireCapableBeanFactory类的initializeBean方法中,通过调用applyBeanPostProcessorsBeforeInitialization方法完成所有实现BeanPostProcessor接口的postProcessBeforeInitialization的调用。
XmlWebApplicationContext使用的BeanFactory是DefaultListableBeanFactory。
DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory,因此可以完成上述操作。
如此完成了只要实现了ServletContextAware接口的,都可以获取ServletContext
转自:http://haishu.iteye.com/blog/729126
- 【转】ServletContextAware接口
- ServletContextAware接口,实现ap保存
- spring中ApplicationContextAware接口ServletContextAware接口
- Spring中ServletContextAware接口使用理解
- spring中ServletContextAware接口使用理解 (转载)
- 不用发送请求,直接在页面中获取数据,需要实现接口ServletContextAware
- ServletContextAware的作用
- ServletContextAware Struts2和Spring2中都有 到底用哪一个?
- 利用Spring的ServletContextAware给ServletContext初始化数据
- 理解接口[转]
- 接口例子[转]
- Hibernate核心接口(转)
- Hibernate-核心接口( 转)
- MII接口详解【转】
- 转 javascript实现接口
- MII接口详解【转】
- FastIo接口介绍(转)
- 深入理解接口(转)
- file_operations数据结构分析
- IT职场人生系列之十八:危险职业(上)
- PHP教程:REST API示例
- ImageSwitcher图片切换器完整代码
- 使用eaayUI创建购物车
- 【转】ServletContextAware接口
- AS3.0碰撞检测 hitTestObject 与 hitTestPoint
- Xcode 4.4.1吐槽:开发者迎来久违的增量更新
- 【树形DP】 hdu4340 Capturing a country
- Makefile 目标 双冒号
- C#tostring格式大全
- CheckBox的OnCheckedChangeListener、OnClickListener、OnTouchListener
- android调用系统程序
- 对话框(2)图说例子(经典)