sturts 2のbean要素の役割

2974 ワード

struts 2のbean要素の構成を見ると、この要素の役割はよく分かりませんが、公式ドキュメントでは、オブジェクト注入と値注入の2つの役割があると言っていますが、当時はかなり抽象的でした.そこでインターネットで多くの資料を調べて、webwork in actionという本を調べてみると、bean要素はstruts 2に導入されたもので、何気なく公式ドキュメントのplug-inという節を見て、bean要素の役割を少し悟ったので、個人的な理解について話します.その前にstruts 2における依存注入(dependency injection)についてまず述べる.
実は依存注入は私たちがよく言う反転制御(IoC)であり、bean構成の節では最初からフレームが独自の依存注入容器を使用していることに言及しています.原文は、Internally、the framework uses its own dependency injection container.という容器が重要なフレームオブジェクトをロードする責任を負っています.したがって、フレームワークの任意の部分は、標準的に秩序化された方法で置換、拡張、および削除することができる.ドキュメントのoverviewのdependency injectionを見てみましたが、struts 2に内蔵されているIoCコンテナはGoogle Guiceベースです.私は関連資料を調べてみると、Google GuiceはGoogle社が最近発表した軽量級IoC容器で、springに比べて以下の特徴を持っている.1.速度が速く、srpingの100倍と呼ばれている.2.プロファイルを必要とせず、jdk 5.0の汎用性と注釈(Annotation)に完全に依存して依存性を記述する.3.単純コード量が少ない.Struts 2にはGoogle Guiceコンテナが統合されています.私たちが要求したactionのオブジェクトを作成し、ページのテキストボックスの値を名前でactionオブジェクトの各ドメインに注入したのは、このGoogle Guiceコンテナのおかげでしょう.そうしないと、私たちのactionは誰が作成したのでしょうか.Actionの各属性の値は誰が私たちに注入したのですか?
今からbean構成の役割について話しましょう.beanの2つの作用対象の注入と値の注入はいずれも注入と関係があるので,beanの作用はその内容のIoC容器と関係があると思う.次にpluginのセクションでsitemeshについて説明します.Struts-plugin.xmlファイルのbean構成は次のとおりです.
<struts>
<bean class="org.apache.struts2.sitemesh.FreeMarkerPageFilter"
static="true" optional="true"/>
<bean class="org.apache.struts2.sitemesh.VelocityPageFilter"
static="true" optional="true"/>
</struts> 
次に、この2つのbean要素は、「static」タグを使用してstrutsフレームワークが起動したときに現在の設定とフレームオブジェクトを静的プロパティ設定器(setter)に注入することを示す.これにより、FreeMarkerPageFilterクラスには、StrutsのFreemarkerManagerクラスのインスタンスと現在のエンコード設定が得られます.原文は以下の通りです
The two bean elements, with the "static"flag enabled, tell Struts to inject the current settings and framework objects into static property setters on startup. This allows, for example, the FreeMarkerPageFilter class to get an instance of the Struts FreemarkerManager and the current encoding setting.
どうやって理解しますか?strutsパブリケーションパッケージのsitemeshに関するドキュメントを開き、FreeMarkerPageFilterというクラスを見つけ、静的プロパティの設定方法を見てみましょう.次の2つがあります.
static void 
setFreemarkerManager(org.apache.struts2.views.freemarker.Freema 

rkerManager mgr) 

static void 
setCustomEncoding(java.lang.String enc)
フレームワークは起動時にStrutsのFreemarkerManagerクラスのインスタンスをFreeMarkerPageFilterに注入しますが、このFreemarkerManagerクラスのインスタンスはどこから来ますか?これはstruts-default.xmlで定義したbeanです.以下に示します.
<bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts" 
optional="true"/> 
これにより、bean要素の最初の役割であるオブジェクト注入が容易に理解できます.bean(FreemarkerManagerなど)は、フレームコンテナによって作成され、他の内部フレームオブジェクト(FreeMarkerPageFilterなど)に注入されます.では、2番目の作用値注入はどのように理解されますか?前述したように、フレームワークは起動時に現在の符号化設定をFreeMarkerPageFilterに注入します.この符号化設定は、コンテナで作成されたオブジェクトではなく、符号化などのフレームワーク定数を受信するのに役立ちます.これで値注入も容易に理解できます.また、beanを注入するには、その「static」属性を定義する必要があります.