ひがやすを技術ブログ

電通国際情報サービスのプログラマ

Adviceに対するDI

DIContainerにおけるAOPAspectJなどに代表されるAOPとの一番の違いは、Adviceに対するDIのあり/なしなのかなと思いました。
DIContainerにおけるAdviceは通常のコンポーネントと同様にDIできます。AspectJなどの場合は、それが基本的にできません。単純なAdviceならいいのですが、複雑な(例えば、データベースにアクセスする)Adviceだとかを作ろうとすると結構困ります。いろいろ実装方法は考えられますが、普通にやるとDI以前のアドホックなやり方になってしまいます。
無難だと思うのは、ProxyAdviceを作ることです。ProxyAdviceのメソッドが呼ばれるとDIコンテナから本当のAdviceを取り出して処理を委譲するのです。ちょっと面倒だけどね。