1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

S2Container 自動バインディング

Posted at

前書き

S2Containerを用いたソースコードを読んでいる時に、不明点があったのでメモ。

内容

登場人物

# インターフェース
aa.bb.cc.app.logic.SampleLogic;

# インターフェース実装クラス
aa.bb.cc.app.logic.impl.SampleLogicImpl

# 処理クラス
aa.bb.cc.app.logic.impl.MainLogicImpl

# コンポーネント定義ファイル
sample.dicon

※名前は適当に変えています。
 

本題

MainLogicImpl.java


@Binding
    private SampleLogic sampleLogic = null;

    (省略)

    sampleLogic.do();

このように処理クラスで、フィールドにインターフェースを定義したあとそのままメソッドを呼び出していたので、DIされているとは思いつつSeaserに詳しくなかったのでとりあえず調べました。

定義は、sample.diconで行われていて、中身はこのようになってました。

sample.dicon

	<component
		class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
		<property name="autoNaming">
			<component
				class="org.seasar.framework.container.autoregister.DefaultAutoNaming" />
		</property>
		<property name="instanceDef">
			@org.seasar.framework.container.deployer.InstanceDefFactory@PROTOTYPE
		</property>
		<initMethod name="addClassPattern">
			<arg>"aa.bb.cc.app.logic.impl"</arg>
			<arg>".*Logic.*"</arg>
		</initMethod>
	</component>

ここでは、コンポーネントの自動登録の設定を記述しており、"aa.bb.cc.app.logic.impl"にある".*Logic.*"の正規表現を満たすファイルが登録されます。

ということなので登場人物であるaa.bb.cc.app.logic.impl.SampleLogicImplはコンポーネント登録の対象になります。

ここで今回重要になる仕様なのですが、

  • 登録名は、登録されたコンポーネントのファイル名から、Implを除去した名前になります。

  • プロパティの型がインターフェースの場合、 コンテナをその型で検索し、見つかったコンポーネントが設定されます。

ここで先ほどの処理クラスをみてみると

MainLogicImpl.java


@Binding
    private SampleLogic sampleLogic = null;

    (省略)

    sampleLogic.do();

プロパティの型であるSampleLogicがインターフェースなので、コンテナからSampleLogicImplからImplが除去されたSampleLogicで登録されているaa.bb.cc.app.logic.impl.SampleLogicImplが設定されるということですね。

認識が間違っていたら申し訳ないですが、いったんこれで納得しました。

参考にさせていただいたサイト

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?