さて、たびたび出てきた AutoWire とは、何か。
ColdSpring のドキュメントによると、
The term "autowire" refers to the ability of the ColdSpring beanFactory to automatically wire dependent objects together without necessarily having to define those dependencies in the xml bean definitions.
とある。
簡単に言うと・・・、説明は止めておこう。実際に、どのように動くのかを見た方がわかりやすい。
検索すれば、AutoWire も、いっぱい出てくる。もちろん、ColdSpring での情報は少ないが。
前回、
<bean id="shopping" class="shopping.model.CartProcess">
<property name="itemAB">
<ref bean="itemArrayBean" />
</property>
</bean>
このような記述をした。
ColdSpring.xml の Bean は、基本的にリクエストごとに、初期化される。
shopping.model.CartProcess を初期化する際に、setItemAB 関数を探して、引数として、itemAB という名前で、itemArrayBean を
渡して処理しなさいということであった。
AutoWire を使えば、この記述が以下のように簡単になる。
<bean id="shopping" class="shopping.model.CartProcess" autowire="byName" />
autowire="byName" をautowire="byType" とすることもできる。
要するに、Bean を受け取りたい側(この場合は、CartProcess.cfc)で、setter 関数を記述さえすれば、取得できるわけである。
byName と、byType は、どう違うのか。名前と型なわけで、全く違うわけだが、byName であれは、setItemAB と名前で探すのに対し、
<bean id="shopping" class="shopping.model.CartProcess" autowire="byType" />
<cfargument name="itemArrayBean" type="shopping.model.ItemArrayBean" />
byType の場合は、setter 関数の名前は set で始まっていればよく、引数の受取の型指定が一致しているものを探すわけである。
同じ型で複数の Bean を作りたい場合には、byName にすることになるだろう。
byTypeの方は、すでに setter 関数があって、名前が重複してしまった場合などに利用することになるだろう。
基本的には、好みで決めればいいのだろう。byType の方が、好みだ。