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オブジェクトを保存する
方法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
)
モニターが呼び出すクラスの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を取るのは簡単です.
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>
org.spring frame ework.web.co.ntenxt.context Loader Servlet
以上の配置により、
Web
コンテナは自動的にロードされます.
//WEB-INF/application Controtext.xml
初期化
Apple Comptext
例として、設定ファイルの位置を指定する必要がある場合は、
context-param
指定を加える:
<context-param>
設定が完了したら、通過できます.
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>
<listener>
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を取るのは簡単です.