Spring取得ビーン(Spring管理下と非Spring管理下)

9877 ワード

BenFactoryはBeanを管理する工場(すなわちspringの容器)であり、その管理の対象はbeanでもFactoryBeanでもいいです.
FactoryBeanは工場beanであり、BenFactoryに管理されています.
 
まずBenFactoryを見てみます.
public
 インターフェース
 BenFactory{
String FACTORYUBEAN PREFIX = “&”
Object getBen(String name);
Object getBen(String name,Class requiredType);
bollan
 containsBean(String name);
bollan
 isSingleton(String name);
bollan
 isPrototype(String name);
bollan
 isType Match(String name,Class targType);
Class getType(String name);
Stering[]get Aliases(String name);
)
 
BenFactoryコーディネーターは、getBeanメソッドを呼び出すだけで、指定されたbeanの参照を得ることができます.
 
 
 
Apple Comptext
相続する
BenFactory
を選択します
BenFactoryが提供するすべての構成フレームと基本的な機能.
Apple Comptextはより強い機能を追加しました.したがって、J 2 EE環境の応用においては、
アプリConteetの下のサブクラスを使うのが一番いいです.
 
Webアプリケーションはweb.xmlでの構成により
キャリアは現在二つの選択があります.
Conttext Loader Listener

Conttext Loader Servlet
.
この両者は機能的に完全に同等であり、ただ一つは基礎である.
Servlet 2.3
バージョンに新しく導入された
Listener
インターフェースは実現して、別の1つの基礎
Servlet
インターフェース実装.開発中は目標に応じて
Web
容器の実際状況を選択します.
にあります
配置は非常に簡単です.
web.xml
で追加:
<listener>
 
      org.springframe ework.web.co.ntenxt.context LoaderListener
 


または:
<servlet>
   context
   
      org.spring frame ework.web.co.ntenxt.context Loader Servlet
   

   1

以上の配置により、
Web
コンテナは自動的にロードされます.
//WEB-INF/application Controtext.xml
初期化
Apple Comptext
例として、設定ファイルの位置を指定する必要がある場合は、
context-param
指定を加える:
<context-param>
   contextConfig Location
   

設定が完了したら、通過できます.
WebApplication Contect tUtils.get WebApplication Conttext
方法は
Web
アプリケーションで取得
Apple Comptext
参照
例えば:
      Application Contect ctx=WebApplication ControtextUtils.get WebApplication Comptext()
           LoginnAction=(LoginnAction)ctx.getBen("action");
 
起動時に自動的にApple Contectのインスタンスをロードします.webアプリケーションでは、ほとんどのBenFactoryによって管理されているユーザーコードは、BenFactoryを知る必要がないが、内部実装では、BenFactoryは、いくつかの方法で実装されている.独立した参照プログラムまたはいくつかのServletについて、action、jspは、以下の方法を使用して、BenFactoryを実行することができる.
    Resource resource= new
 FileSystem Resource(「beans.xml」)    
    BenFactory factory = new
 Xml BenFactory(resource);
 
    Class PathResource= new
 Class PathResource(「beans.xml」)  
    BenFactory factory = new
 Xml BenFactory(resource);
 
    Application Comptext context= new
 Class PathXml Apple Comptext(new
 String[]{「appication Contact.xml」、「appication Controtext-part2.xml」));
    BenFactory ファクトリー = (BenFactory)context;
=====================================================================================================================================
 
 
 
 
 
しかし、システム内の非Springフレーム管理のクラスに対して、Spring管理のクラスを取得する必要がある場合、または、プログラム中でビーンのIDに基づいてビーンインスタンスを動的に取得する必要があり、このクラスに必要なビーン属性のすべてのsetter方法を事前に提供することはできない.このような場合、Springフレーム管理のクラスインスタンスを取得する方法は様々である.簡単にまとめてみます.
 
方法1:初期化時にApple Comptextオブジェクトを保存する
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");

  ac.getBean("beanId");
             Spring         ,               Spring   。
   :  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システムに適しており、ServletContectオブジェクトを通じてAppplication Contectオブジェクトを取得し、必要なクラスのインスタンスを取得する.
           ,         ServletContext       。   getWebApplicationContext()     WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE                   null。  ,           NullPointerExceptions ,        getRequiredWebApplicationContext()   。     ApplicationContext             。
            ,            ,    null。
     :      ApplicationObjectSupport
   ApplicationObjectSupport  getApplication Conteet()ApplicationContext。Spring    ,        setApplicationContext(Apple Comptext context)   Apple Comptext     。
方法4:抽象類WebAppleから引き継ぐObject Support 上記のように、get WebApplication Contect()を呼び出してWebApplication Contextを取得します. 
方法5:インターフェースApplication ControtextAwareを実現する このインターフェースを実現する
setApple Contect(
Apple Comptext メソッドを保存します.
Apple Comptext オブジェクトSpringを初期化すると、この方法で
Apple Comptext オブジェクト注入
自分はweb.xmlで設定して、一つのモニターで種類を直接読み取り、tomcat起動時に実行します.
web.xml
<context-param>
 contextConfig Location
 
 
<listener>
  comp.wzw.listener.SpringListener
 
SpringListener package com.wzw.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.wzw.spring.common.SpringBeanFactory;
public class SpringListener implements ServletContextListener {
 public void contextInitialized(ServletContextEvent sce) {
  // TODO Auto-generated method stub
String relativePath = sce.getServletContext().getInitParameter(
"contextConfigLocation");
String realPath = sce.getServletContext().getRealPath(relativePath);
SpringBeanFactory.init(realPath);
 }
 public void context Destroyed(ServletContEvent arg 0){  //TODO Auto-generated methodb stub SpringBeanFactory.clear();
)
モニターが呼び出すクラスのpackage comp.wzw.spring.co mmon.import java.util.Locale;import org.apache.struts.actions.アクションメッセージ;import org.springframe ewark.com ntxt.support.lassPathXml Apple Contect;import org.springframe ework.com.support.FileSystemXlApple Conteet;import org.springframe ework.co ntenxt.Application Context;public class SprigBenFactory{   prvate static Apple Comptext context;   /**    * アプリケーション起動時にスプリングフレームを配置する    *    * @param filePath    */   public static void init(String filePath){    if(context==null){       context=new FileSystemXmlAppleicationComptext(filePath)    }  }   public static Appplication Contect get Contect(){    return context;   }   /**    * 方法は、業務の対象を取得するために使用されます.    *    * @param beanName    * @return    */   public static Object get Business Ojbect(String beanName){    return context.getBen(beanName);   }   /**    * アプリケーションが閉じられているときは、springフレーム配置情報をクリアします.    */   public static void clear(){    if(context!=null){     context=null;    }   }}これでappicationが取れます.配置が正確であれば、appicationでbeanを取るのは簡単です.