では、コントローラーではないコンポーネントに ColdSpring の Bean を渡すには、どうすればよいのか。
ロジックの、CartProcess.cfc に itemArrayBean を渡す方法を考えてみよう。
bean タグは、子要素に、constructor-arg と、property を持つことができる。
constructor-arg は、コンストラクタの引数として渡すためのタグ。
property は、setter 関数で渡すためのタグとなっている。
<bean id="shopping" class="shopping.model.CartProcess">
<constructor-arg name="itemAB">
<ref bean="itemArrayBean" />
</constructor-arg>
</bean>
と ColdSpring.xml に記述してやることによって、CartProcess.cfc の初期化の際に、引数で自動的に渡してくれるのである。
初期化の関数は、デフォルトで、init になっているようで、
<cffunction name="init" returntype="any" access="public" output="false">
<cfargument name="itemAB" required="true">
<cfset variables.itemArray = arguments.itemAB.getItemArray() />
<cfreturn this />
</cffunction>
という記述を、CartProcess.cfc にしてやると、CartProcess.cfc 上で、いつでも商品リストデータが利用可能になる。
一方、
<constructor-arg name="itemAB">
<ref bean="itemArrayBean" />
</constructor-arg>
を、
<property name="itemAB">
<ref bean="itemArrayBean" />
</property>
とすると、自動的に、CartProcess.cfc にある、setItemAB という関数を探して itemArrayBean を渡してくれるのである。
再び、サンプルアプリケーションを作ってみた。
できることは同じであるが、ColdSpring を利用して、コントローラーへ、自動的に、データを渡している。