JAvaはspringのbeanを得る
3038 ワード
方法1:初期化時にApplicationContextオブジェクトを保存する
コード:ApplicationContext ac=n e w E l e SystemXmlApplicationContex(「アプリケーションContext.xml」) ac.getBean("beanId"); 説明: この方法はSpringフレームワークを採用した独立したアプリケーションに適用され、プログラムがプロファイルを通じてSpringを手動で初期化する必要がある場合に適用されます. 方法2:Springが提供するツールクラスからApplicationContextオブジェクトコードを取得する: import org.springframework.web.context.support.WebApplicationContextUtils; ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc) ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc) ac1.getBean("beanId"); ac2.getBean("beanId"); 説明: この方法はSpringフレームワークを採用したB/Sシステムに適しており、サーブレットContextオブジェクトを介してApplicationContextオブジェクトを取得し、必要なクラスインスタンスを取得する.上記の2つのツール方式の違いは,前者が取得に失敗したときに異常を投げ出し,後者がnullを返すことである.
内 servletContext sc 具体的に に代わる servlet.getServiceletContext()または this.getServletContext() または request.getSession().getServletContext();
またspringは注入されたオブジェクトがサーブレットContextに置かれているため、WebApplicationContextをサーブレットContextから直接取り出すことができる オブジェクト:
WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); メソッド3:抽象クラスからのアプリケーションオーバーシュートの継承 説明: 抽象クラスApplicationObjectSupportはgetApplicationContext()メソッドを提供し、ApplicationContextを簡単に入手できます.Springが初期化されると、この抽象クラスのsetApplicationContext(ApplicationContext context)メソッドでApplicationContextが オブジェクト注入.
方法4:抽象クラスから引き継ぐWebApplicationObjectSupport 説明: 上記の方法と同様に、getWebApplicationContext()を呼び出してWebApplicationContextを取得します. 方法5:インタフェースアプリケーション制御extAwareを実現する 説明: このインタフェースのsetApplicationContext(ApplicationContext context)メソッドを実装し、ApplicationContextを保存します. オブジェクト.Springが初期化されると、この方法でApplicationContextが オブジェクト注入.以上の方法は異なる場合に適しており、状況に応じて適切な方法を選択してください.ここで注目すべきは、システムで上記の方法を用いたクラスは、実際にSpringフレームワークと密接に結合されていることである.これらのクラスは、Springフレームワーク上で動作していることを知っているため、システムでは、このようなアプリケーションをできるだけ減らし、システムが現在の動作環境からできるだけ独立し、DI方式で必要なサービスプロバイダを得るようにしなければならない.
方法6:
ソースコードによる検出
ContextLoaderで
本文の抜粋:http://blog.csdn.net/huang798807481/article/details/7739072
コード:ApplicationContext ac=n e w E l e SystemXmlApplicationContex(「アプリケーションContext.xml」) ac.getBean("beanId"); 説明: この方法はSpringフレームワークを採用した独立したアプリケーションに適用され、プログラムがプロファイルを通じてSpringを手動で初期化する必要がある場合に適用されます. 方法2:Springが提供するツールクラスからApplicationContextオブジェクトコードを取得する: import org.springframework.web.context.support.WebApplicationContextUtils; ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc) ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc) ac1.getBean("beanId"); ac2.getBean("beanId"); 説明: この方法はSpringフレームワークを採用したB/Sシステムに適しており、サーブレットContextオブジェクトを介してApplicationContextオブジェクトを取得し、必要なクラスインスタンスを取得する.上記の2つのツール方式の違いは,前者が取得に失敗したときに異常を投げ出し,後者がnullを返すことである.
内 servletContext sc 具体的に に代わる servlet.getServiceletContext()または this.getServletContext() または request.getSession().getServletContext();
またspringは注入されたオブジェクトがサーブレットContextに置かれているため、WebApplicationContextをサーブレットContextから直接取り出すことができる オブジェクト:
WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); メソッド3:抽象クラスからのアプリケーションオーバーシュートの継承 説明: 抽象クラスApplicationObjectSupportはgetApplicationContext()メソッドを提供し、ApplicationContextを簡単に入手できます.Springが初期化されると、この抽象クラスのsetApplicationContext(ApplicationContext context)メソッドでApplicationContextが オブジェクト注入.
方法4:抽象クラスから引き継ぐWebApplicationObjectSupport 説明: 上記の方法と同様に、getWebApplicationContext()を呼び出してWebApplicationContextを取得します. 方法5:インタフェースアプリケーション制御extAwareを実現する 説明: このインタフェースのsetApplicationContext(ApplicationContext context)メソッドを実装し、ApplicationContextを保存します. オブジェクト.Springが初期化されると、この方法でApplicationContextが オブジェクト注入.以上の方法は異なる場合に適しており、状況に応じて適切な方法を選択してください.ここで注目すべきは、システムで上記の方法を用いたクラスは、実際にSpringフレームワークと密接に結合されていることである.これらのクラスは、Springフレームワーク上で動作していることを知っているため、システムでは、このようなアプリケーションをできるだけ減らし、システムが現在の動作環境からできるだけ独立し、DI方式で必要なサービスプロバイダを得るようにしなければならない.
方法6:
ソースコードによる検出
public class ContextLoaderListener extends ContextLoader implements ServletContextListener
ContextLoaderで
public static WebApplicationContext getCurrentWebApplicationContext() {
ClassLoader ccl = Thread.currentThread().getContextClassLoader();
if (ccl != null) {
WebApplicationContext ccpt = currentContextPerThread.get(ccl);
if (ccpt != null) {
return ccpt;
}
}
return currentContext;
}
WebApplicationContext w= ContextLoader.getCurrentWebApplicationContext();
// web
//ApplicationContext w=new ClassPathXmlApplicationContext("beans.xml");
IQZServices iqzs=w.getBean("qzService",IQZServices.class);
iqzs.writeAllEmpExcel();
本文の抜粋:http://blog.csdn.net/huang798807481/article/details/7739072