JAvaクラスでspringのApplicationContext.xmlからbeanを取得
7465 ワード
1.通常javaクラスでは、アプリケーションContext.xmlで構成されているbeanを取得するには、次のようにします.
この方式は確かにアプリケーション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()メソッドを実装.
ステップ2:springのアプリケーションContext.xmlでbeanを構成する
手順3:web.xmlでspringリスナーを構成する(宛先コンテナが起動するとアプリケーションContext.xmlがロードされる)
手順4.プロジェクトjでSpringFactoryクラスを使用して指定されたidの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();
}