Webプロジェクト初期化操作

7140 ワード

前言:java webではSpringコンテナが一般的に使われていますが、プロジェクトを初期化し、一連の操作を行う必要がある場合はどうすればいいですか.一般的な状況の1つは、プロジェクトの開始時にデータベースの一連の操作を行うことです.
具体的な操作を説明する前に基礎知識を補充する: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);

    }

}

未完、続きます.