アノテーション利用時のオブジェクト差し替え
Spring 2.5からはアノテーションを利用することで、XMLファイルを記述することなくオブジェクトのインジェクションが可能になりました。詳細はJSUGの勉強会で岡本さんが発表してくださった資料(Spring2.5-Annotation.pdf)をご参照ください。
アノテーションは確かに楽だけど、じゃあオブジェクトをモックと差し替えたい時にはアノテーションを変更してコンパイルし直さなきゃならないのか、という疑問が出てくるかと。結論から言えば、
アノテーションによるインジェクションを行う場合は、
<context:component-scan base-package="hoge.sample"/>
この記述により、hoge.sampleパッケージ配下の全てのクラスで定義されたアノテーションが読み込まれ、オブジェクトのインジェクションが行われます。
オブジェクトを差し替える場合は、
<context:component-scan base-package="hoge.sample"> <context:exclude-filter type="assignable" expression="hoge.sample.FugaImpl"/> </context:component-scan>
このような定義を行うと、hoge.sample.FugaImplクラスで定義されたアノテーションは無視されるため、別途bean定義を行うことでオブジェクトの差し替えが可能となります。
Filter Type | Example Expression |
---|---|
annotation | org.example.SomeAnnotation |
assignable | org.example.SomeClass |
regex | org\.example\.Default.* |
aspectj | org.example..*Service+ |
これらを組み合わせれば、複数のクラスのアノテーションを効率よく有効化/無効化することができるかと。