Webプロジェクト初期化操作
7140 ワード
前言:java webではSpringコンテナが一般的に使われていますが、プロジェクトを初期化し、一連の操作を行う必要がある場合はどうすればいいですか.一般的な状況の1つは、プロジェクトの開始時にデータベースの一連の操作を行うことです.
具体的な操作を説明する前に基礎知識を補充する:1 webコンテナの初期化のステップはwebである.xmlの初期化順序:context-param->listener->filter->servlet.②
web.xmlが上記のコードを構成するとSpringコンテナが起動し、ContextLoaderListenerクラスがサーブレットContextListenerを実現する
③サーブレットContextListenerは、サーブレットContextオブジェクトのライフサイクルを傍受することができ、実際にはWebアプリケーションを傍受するライフサイクルである.
サーブレットコンテナがWebアプリケーションを起動または終了すると、サーブレットContextEventイベントがトリガーされます.このイベントはサーブレットContextListenerによって処理されます.サーブレットContextListenerインタフェースでは、サーブレットContextEventイベントを処理する2つの方法が定義されています.
④WebアプリケーションがSpringコンテナを統合すると、Springコンテナを表すWebApplicationContextオブジェクトはWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTEは、サーブレットContextのプロパティリストにキーとして格納されます.WebApplicationContext:WebApplicationContext wac=(WebApplicationContext)servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); ただしorg.springframework.web.context.WebApplicationContext wac=WebApplicationContextUtils.getWebApplicationContext(servletContext);
では、Web起動時にいくつかの操作をするには、どうすればいいですか?
1.シナリオ実装Spring BeanPostProcessorクラス
SpringはbeanをロードするときにpostProcessAfterInitializationという方法をコールバックすることがわかります.上図はmybatisのSqlSessionTemplateをインスタンス化した後、SqlSessionTemplateのインスタンスを取得していくつかのデータベース操作を行います.
2.上記の基礎知識を継承するContextLoaderListener
3.ApplicationObjectSupportの継承
未完、続きます.
具体的な操作を説明する前に基礎知識を補充する:1 webコンテナの初期化のステップはwebである.xmlの初期化順序:context-param->listener->filter->servlet.②
org.springframework.web.context.ContextLoaderListener
web.xmlが上記のコードを構成するとSpringコンテナが起動し、ContextLoaderListenerクラスがサーブレットContextListenerを実現する
③サーブレットContextListenerは、サーブレットContextオブジェクトのライフサイクルを傍受することができ、実際にはWebアプリケーションを傍受するライフサイクルである.
サーブレットコンテナがWebアプリケーションを起動または終了すると、サーブレットContextEventイベントがトリガーされます.このイベントはサーブレットContextListenerによって処理されます.サーブレットContextListenerインタフェースでは、サーブレットContextEventイベントを処理する2つの方法が定義されています.
④WebアプリケーションがSpringコンテナを統合すると、Springコンテナを表すWebApplicationContextオブジェクトはWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTEは、サーブレットContextのプロパティリストにキーとして格納されます.WebApplicationContext:WebApplicationContext wac=(WebApplicationContext)servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); ただしorg.springframework.web.context.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 。
com.ysb.framework.listener.BeanUtil
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);
}
}
未完、続きます.