Seasar2でDIしてみた
Seasar2で明示的にDI(正規表現でクラス指定とかせずに)してみた。
大きく、以下の2種類の方法があるが、それぞれやってみた。
- diconファイルに記載する方法
- アノテーションで記載する方法
(SpringでのDIについては、日記「Spring DIおよびAOPをアノテーションで設定する - oknknicの日記」などを参照)
前提事項
DI対象のクラス
package ok.plugin.impl; public class TestComponentImpl implements TestComponent{ @Override public void init() { // 処理 } @Override public void method1() { // 処理 } }
DIコンテナからの取得例
TestComponent testComponent = SingletonS2Container.getComponent("testComponent"); testComponent.method1();
diconファイルに記載する方法
対象ファイル:
src/main/resources/app.dicon(アプリケーションで使用するdiconファイルの基点となるファイル)
追記内容:
<components> <!-- いろいろ省略 --> <component name="testComponent" class="ok.plugin.impl.TestComponentImpl" instance="singleton"> <initMethod name="init"></initMethod> </component> </components>
※DIするクラスを差し替えたい場合は、"ok.plugin.impl.TestComponentImpl"の部分を変更すればOK。
同じインタフェース(ok.plugin.TestComponent)を実装しているクラスなら、何にでも差し替え可能。
アノテーションで記載する方法
DI対象のクラスに下記のとおりアノテーションを追記する。
package ok.plugin.impl; @Component(name = "testComponent", instance = InstanceType.SINGLETON) public class TestComponentImpl implements TestComponent{ @InitMethod @Override public void init() { // 処理 } @Override public void method1() { // 処理 } }
※動作未確認。宿題事項。