ColdSpring
ColdSpring を活用してみよう。
すでに ColdSpring の機能である、“DI”というものについての記述は、たくさんあるので、どのように使うかを見ていく。
よい題材が思いつかなかったので、Common.cfc で生成していた商品リストを「強引に」ColdSpring でやってみよう。
ColdSpring.xml に下記のように記述する。
<bean id="itemArrayBean" class="shopping.model.ItemArrayBean">
<property name="itemArray">
<list>
<map>
<entry key="name"><value>光学式マウス</value></entry>
<entry key="price"><value>2600</value></entry>
</map>
<map>
<entry key="name"><value>ボール式マウス</value></entry>
<entry key="price"><value>1100</value></entry>
</map>
<map>
<entry key="name"><value>レーザー式マウス</value></entry>
<entry key="price"><value>4800</value></entry>
</map>
</list>
</property>
</bean>
ここで注意しなければならないのは、Model-Gule は、ColdSpring.xml などのファイルを、OSのデフォルトエンコーディングを前提に
読み込んでいるらしく、Windows で動作させる場合は、Shift_JIS で保存しなければ、文字化けしてしまった。
<?xml version="1.0" encoding="UTF-8"?>
としても、だめだった。他のOSでは試していないので、あくまで、推測である。
自動で判別してくれるとか、先頭行をチェックしてから読み込むということは、してくれないようである。
shopping.model.ItemArrayBean は、商品リストデータを保持するコンポーネント。
Java でいうところの、Bean ということになる。ColdSpring でも、この Bean という単語を採用している。
デフォルトでは、リクエストごとに、インスタンスが生成されているようだ。
固定値を保持するような Bean は、アプリケーションで1インスタンスでいいのだから、何かしら、やり方があるのだろうか。
singleton とかの記述もマニュアルにあるし、できそうな雰囲気もあるが、試していない。
では、実際に、これを利用するためには、どうすればよいのか。
コントローラーでは、非常に簡単に利用できる。
getModelGlue().getBean("itemArrayBean") これだけで、取得できてしまうのである。
Controller.cfc にある、onRequestStart 関数に
<cfset variables.itemArrayBean = getModelGlue().getBean("itemArrayBean") /> とすれば、Controller.cfc 上では、いつでも、利用可能になる。
また、あたかも、AutoWire のように、
<cffunction name="setItemArrayBean" access="public" returnType="void" output="false">
<cfargument name="itemArrayBean" type="any">
<cfset variables.itemArrayBean = arguments.itemArrayBean />
</cffunction>
としてやるだけでも、取得できてしまう。
「あたかも、AutoWire のように」としたのは、ColdSpring.xml の bean タグに、AutoWire の設定することなく、
setter 関数が処理されたためにこのような表現をした。コントローラーは、本当に特別なもののようだ。
AutoWire については、また、後日、読み解いてみたい。



