S2ApplicationContextを用いてコンポーネントにアスペクトする場合は、自動アスペクトを設定するか、 各クラスでコメントアノテーションを設定する方法があります。
自動アスペクトを設定する.
S2ApplictionContextの自動アスペクト機能を使用する場合は、S2ApplictionContext::registerAspectメソッドでアスペクトを設定します。
例として、次のようなサービスクラスにAspectを適用してみます。class Service { public function add($a, $b) { return $a + $b; } }S2ApplicationContext::importメソッドでServiceクラスをインポートします。S2ApplicationContext::createメソッドで コンテナを生成し、getComponentメソッドでServiceコンポーネントを取得します。
<?php require_once('S2Container/S2Container.php'); seasar\container\S2ApplicationContext::import(dirname(__FILE__) . '/classes'); seasar\container\S2ApplicationContext::registerAspect('new seasar\aop\interceptor\TraceInterceptor', '/^Service$/', '^add$'); $container = seasar\container\S2ApplicationContext::create(); $service = $container->getComponent('Service'); print get_class($service) . PHP_EOL; $result = $service->add(2, 3);S2ApplicationContext::registerAspectメソッドの引数で、アスペクトを適用するコンポーネント名やInterceptor、Pointcutを設定します。
コメントアノテーションで設定する.
コメントアノテーションでアスペクト設定を記述する場合は、@S2Aspectアノテーションを用います。 @S2Aspectアノテーションはクラスまたはメソッドに記述することができます。
例として、サービスクラスにAspectを適用してみます。クラスにアノテーションを記述する場合は次のようになります。
/** * @S2Aspect('interceptor' => 'new seasar\aop\interceptor\TraceInterceptor', * 'pointcut' => '^add$') */ class Service { public function add($a, $b) { return $a + $b; } }メソッドにアノテーションを記述する場合は次のようになります。pointcutは省略できます。
class Service { /** * @S2Aspect('interceptor' => 'new seasar\aop\interceptor\TraceInterceptor') */ public function add($a, $b) { return $a + $b; } }S2ApplicationContext::importメソッドでServiceクラスをインポートします。S2ApplicationContext::createメソッドで コンテナを生成し、getComponentメソッドでServiceコンポーネントを取得します。
<?php require_once('S2Container/S2Container.php'); seasar\container\S2ApplicationContext::import(dirname(__FILE__) . '/classes'); $container = seasar\container\S2ApplicationContext::create(); $service = $container->getComponent('Service'); print get_class($service) . PHP_EOL; $result = $service->add(2, 3);
S2ContainerFactoryを使用する場合は、S2Containerの定義ファイルであるダイコンファイルで、aspectタグを用いてアスペクト設定を行います。
例として、次のようなサービスクラスにアスペクトを行います。
class Service { public function add($a, $b) { return $a + $b; } }
アスペクトをコンポーネントに組み込みます。aspectタグのボディでInterceptorの名前を指定します。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component name="trace" class="seasar\aop\interceptor\TraceInterceptor"/> <component class="Service"> <aspect pointcut="^add$">trace</aspect> </component> </components>
S2ContainerFactoryのcreateメソッドで上記ダイコンファイルを指定して、コンテナを生成します。
<?php require_once('S2Container/S2Container.php'); seasar\util\ClassLoader::import(dirname(__FILE__) . '/classes'); $container = seasar\container\factory\S2ContainerFactory::create('/path/to/diconファイル'); $service = $container->getComponent('Service'); print get_class($service) . PHP_EOL; $result = $service->add(2, 3);
© Copyright The Seasar Foundation and the others 2005-2010, all rights reserved. |