では、どのようにAOPを実装するのかを見ていく。
前回のログを書き出すコードとして拝借したファイルは、LogginAroundAdvice.cfc と LoggingService.cfc の2つ。
LoggingService.cfc は、ログを書き出すだけのコンポーネント。
LogginAroundAdvice.cfc は、ログの機能を追加しようとしている関数に対して、どういうタイミングでログを書き出すかを
指定(Advice)するためのコンポーネント。
Advice という用語が出てきた。これが実にわかりにくい。
今でも、はっきりわかっていない。おぼろげな認識では、
“どういう機能(ログ書き出し)をどのタイミング(前、後、前後、エラー時)で提供”するかということだろうか。
そして、Advisor というものもある。その Advice を“どういうものに付け加えるかを指定”するとでも言うのだろうか。
ドキュメントの英文を読んでも、ピンと来ないし、困ったものだ。
<bean id="loggingService" class="shopping.model.aop.component.LoggingService" />
<bean id="loggingAdvice" class="shopping.model.aop.aspects.LoggingAroundAdvice">
<property name="loggingService">
<ref bean="loggingService">
</property>
</bean>
<bean id="loggingAdvisor" class="coldspring.aop.support.NamedMethodPointcutAdvisor">
<property name="advice">
<ref bean="loggingAdvice" />
</property>
<property name="mappedNames">
<value>*</value>
</property>
</bean>
ColdSpring.xml で、このように設定する。
loggingService という Bean を設定し、その機能を AroundAdvice する loggingAdvice を設定。
任意の関数名で処理を織り込む(Weave)loggingAdvisor を設定。
これにより、ログ機能(shopping.model.aop.component.LoggingService)をAOPで利用するための準備が整う。
前回の
<bean id="shopping" class="coldspring.aop.framework.ProxyFactoryBean">
<property name="target">
<ref bean="cartProcessTarget" />
</property>
<property name="interceptorNames">
<list>
<value>loggingAdvisor</value>
</list>
</property>
</bean>
で、bean id="shopping" に引数 interceptorNames で渡している loggingAdvisor が上記の設定でできるのである。