« Transfer Event Model | メイン | ちょっと楽になるかな?ツール »

Observer を Inject する

Google Groups に参考になるスレッドが上がってた。
addXXXObserver(component), where to call? is singleton required?
そこからのリンクMy Take on Transfer ORM Event Model - BeforeCreate Example
Observer の登録の仕方だ。これを参考にすると、すっきりした。

ColdSpring.xml

 <bean id="ObserverInjector" class="&topOfPackage;.model.observer.ObserverInjector" lazy-init="false">
  <constructor-arg name="ormService"><ref bean="ormService" /></constructor-arg>
  <constructor-arg name="observer"><ref bean="observer" /></constructor-arg>
 </bean>

shopping.model.observer.ObserverInjector.xml の init 関数

 <cffunction name="init" access="public" returntype="any" hint="I am used to add the observer to Transfer.">
  <cfargument name="ormService" type="transfer.TransferFactory" required="true" />
  <cfargument name="observer" type="any" required="true" />
  
  <cfset variables.transfer = arguments.ormService.getTransfer() />
  <cfset variables.transfer.addAfterCreateObserver(arguments.observer) />
  <cfset variables.transfer.addAfterUpdateObserver(arguments.observer) />
  <cfreturn this />
 </cffunction>

こうすることによって、モデル内で、setObserver が要らないし、observer を transfer に登録する必要がない。

で、特定の Transfer オブジェクトにだけ、observe したいのであれば、observer 内の各関数で、

 arguments.event.getTransferObject().getClassName()

とすることでオブジェクト名がわかるから、それに応じて、分岐させてやればよい。

トラックバック

このエントリーのトラックバックURL:
http://www.schwarzmond.info/mt/mt-tb.cgi/78

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年06月03日 09:40に投稿されたエントリーのページです。

ひとつ前の投稿は「Transfer Event Model」です。

次の投稿は「ちょっと楽になるかな?ツール」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。