JAvaクラスでspringのApplicationContext.xmlからbeanを取得

7465 ワード

1.通常javaクラスでは、アプリケーションContext.xmlで構成されているbeanを取得するには、次のようにします.
import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;



public class SpringConfigTest

{

    public static void main(String[] args) throws Exception

    {

        ApplicationContext ac = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");

        DataSource datasource = (DataSource) ac.getBean("dataSource");

        

        

    }

}

この方式は確かにアプリケーションContext.xmlから指定idのBeanを取得できるが、効率は低く、getBeanに行くたびにアプリケーションContext.xmlファイルを再ロードしてしまうので、web開発ではそのまま使用することは推奨されず、以下の方法を採用することができる
2.SpringではApplicationContextオブジェクトを取得するためのインタフェースが用意されています.org.springframework.context.ApplicationContextAwareでは、ApplicationContextAwareインタフェースのsetApplicationContextメソッドを実装し、SpringのプロファイルアプリケーションContext.xmlにApplicationContextAwareインタフェースを実装するクラスのクラスを登録するだけです.静的なApplicationContext変数でApplicationContextを保存しておけば良いのですが(web.xmlではspring Listenerが構成されていれば、サービス開始時にプロファイルを読み込んでApplicationContextに値を付けて、好きなように静的なApplicationContextを使えます
ステップ1:クラス実装ApplicationContextAwareを書き、setApplicationContext()メソッドを実装.
 
import org.springframework.beans.BeansException;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;



public class SpringFactory implements ApplicationContextAware

{

    private static ApplicationContext context;

    

    /**

     *   setApplicationContext()

     */

    public void setApplicationContext(ApplicationContext context)

            throws BeansException

    {

        this.context = context;

    }

    

    /**

     *  applicationContext     id bean

     * @param id    springBean id

     * @return

     */

    public static Object getObject(String id) {

        Object object = null;

        object = context.getBean(id);

        return object;

     }



}

ステップ2:springのアプリケーションContext.xmlでbeanを構成する
<!--   SpringFactory  -->

    <bean id="springfactory"  class="com.espeed.util.SpringFactory">

    </bean>

手順3:web.xmlでspringリスナーを構成する(宛先コンテナが起動するとアプリケーションContext.xmlがロードされる)
<!--   spring    -->

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath:applicationContext.xml</param-value>

    </context-param>

    <listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

 
 
手順4.プロジェクトjでSpringFactoryクラスを使用して指定されたidのBeanを取得できるようになりました(サーバ起動でテストしなければなりません.そうしないと空のポインタ異常に違いありません)
public class DBUtil 

{

    private  static  DataSource dataSource;

    static

    {

        dataSource =  (DataSource) SpringFactory.getObject("dataSource");

        

    }

    //    

    public static Connection getConnection() throws SQLException

    {

        return dataSource.getConnection();

    }