web项目初始化操作
来源:互联网 发布:大众软件 故事合集 编辑:程序博客网 时间:2024/06/06 00:37
前言:现在java web一般会用到Spring容器,那么当我们需要在项目初始化,进行一系列操作时该怎么办?很常见的一种情况就是,项目启动时要进行数据库一系列的操作。
在讲解具体操作之前先补充一下基础知识:
①web容器初始化的步骤是
web.xml的初始化顺序:context-param –> listener –> filter –> servlet 。
②
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
当web.xml配置如上代码时则会启动Spring容器, ContextLoaderListener该类实现了ServletContextListener
③ ServletContextListener能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。
当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法。
④当 Web 应用集成 Spring 容器后,代表 Spring 容器的WebApplicationContext对象将以
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 为键存放在ServletContext的属性列表中。您当然可以直接通过以下语句获取 WebApplicationContext:
WebApplicationContext wac = (WebApplicationContext)servletContext.
getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
但通过位于 org.springframework.web.context.support 包中的WebApplicationContextUtils 工具类获取 WebApplicationContext 更方便:
WebApplicationContext wac =WebApplicationContextUtils.
getWebApplicationContext(servletContext);
那么若要在web启动的时候做一些操作,那么要怎么做?
1.方案 实现Spring BeanPostProcessor类
public class CacheBeanPostProcessor implements BeanPostProcessor{ DataCenters dataCenter = new DataCenters(); /* Bean实例化完毕后执行的后处理操作,所有初始化逻辑、装配逻辑之前执行, * 如果返回false将阻止其他的InstantiationAwareBeanPostProcessor的postProcessAfterInstantiation的执行, * (3.2和(9.1处执行;在此处可以执行一些初始化逻辑或依赖装配逻辑; * */ public Object postProcessAfterInitialization(Object obj, String arg1) throws BeansException { if(obj instanceof SqlSessionTemplate){ Firm.setSession((SqlSessionTemplate) obj); dataCenter.init(); } return obj; } public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException { return arg0; }}
可以看出Spring在加载bean的时候都会回调postProcessAfterInitialization该方法,那么上图就是mybatis的SqlSessionTemplate实例化了后即可获取SqlSessionTemplate的实例进行一些数据库操作了。
2.继承 上面基础知识提到的ContextLoaderListener
package com.ysb.framework.listener;import javax.servlet.ServletContextEvent;import org.springframework.context.ApplicationContext;import org.springframework.web.context.ContextLoaderListener;import org.springframework.web.context.support.WebApplicationContextUtils;public class BeanUtil extends ContextLoaderListener {private static ApplicationContext applicationContext;public void contextInitialized(ServletContextEvent event) {super.contextInitialized(event);//这里即可进行自己的初始化操作applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(event.getServletContext());}public static Object getBean(String beanName) {return applicationContext.getBean(beanName);}}将spring加载配置的监听重写一下,重写内容也很简单,继承一下ContextLoaderListener ,然后创建一个spring的静态容器,需要用到spring容器里的bean时就从静态容器里面取就行了。web.xml中的spring的加载监听改为如下。<listener><listener-class>com.ysb.framework.listener.BeanUtil</listener-class></listener>楼主的加载方式是用的servlet,其实监听和servlet都是一样,目的就是在系统启动时执行那段加载代码。
3.继承ApplicationObjectSupport
import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ApplicationObjectSupport;public final class ToolSpring extends ApplicationObjectSupport { private static ApplicationContext applicationContext = null; @Override protected void initApplicationContext(ApplicationContext context) throws BeansException { super.initApplicationContext(context); //这里进行初始化操作 if (ToolSpring.applicationContext == null) { ToolSpring.applicationContext = context; } } public static ApplicationContext getAppContext() { return applicationContext; } public static Object getBean(String name) { return getAppContext().getBean(name); }}
未完,待续。
- web项目初始化操作
- Web 项目启动初始化
- web项目启动初始化
- web项目启动初始化java Demo
- java web项目的启动及初始化
- java 普通web项目启动初始化方法
- java web项目的启动及初始化
- 从maven创建web项目初始化
- java web项目的启动及初始化
- Android项目初始化数据的loding操作
- Listener、Filter、Servlet与Java Web项目初始化的工作
- Silverlight利用Application_Startup获取web项目中的初始化参数
- 知识点整理之Web项目中Log4J的初始化
- Web项目启动初始化监听器如何获取spring bean
- CentOS 7 下 WEB 项目运行环境初始化
- [spring] Tomcat 中WEB文件的初始化操作
- 关于java web项目的部署操作
- web项目的压缩作用,操作指南
- UVA 1600 Patrol Robot
- corn表达式——用于设置定时任务
- iOS 开发 本地通知的使用
- CodeForces 611 A. New Year and Days(水~)
- Java设计模式--策略模式
- web项目初始化操作
- Android Audio Framework 之AudioPolicyService
- Unity3D 5 官方教程:地形引擎
- 深入理解jquery新的绑定事件机制on方法的使用
- IT公司面试题系列一
- UVA 804 Petri Net Simulation
- Drupal主题选粹
- 眼睛比较舒服的xshell自定义color theme
- 菜鸟在线Unity3d教程:如何获取摄像机图像?