自動バインディング
DIの指定を省略した場合、 コンポーネント間の依存関係は、 型および名前によってS2Containerが自動的に解決します。 componentタグのautoBinding属性を指定することで細かく制御することもできます。
autoBinding | 説明 |
---|---|
auto(default) | コンストラクタとプロパティの自動バインディングが適用されます。 |
semiauto | アノテーションなどで明示的に指定したプロパティに対して自動バインディングが適用されます。 |
constructor | コンストラクタの自動バインディングが適用されます。 |
property | プロパティの自動バインディングが適用されます。 |
none | 自動バインディンは適用されません。 |
コンストラクタ・インジェクションの自動バインディング
1. コンストラクタ・インジェクションが明示的に指定されている場合、 自動バインディングは適用されません。
2. デフォルトコンストラクタが定義されている場合、自動バインディングは適用されません。
3. 引数の型がすべてインタフェースで、最も引数の多いコンストラクタに自動バインディングは適用される。
プロパティ・インジェクションの自動バインディグ
1. セッター・インジェクションが明示的に指定されている場合、 自動バインディングは適用されません。
複数実装の場合、エラーが発生する。
プロパティ・インジェクションの自動バインディグ-2の例
app.dicon |
<components>
<include path="convention.dicon"/>
<include path="aop.dicon"/>
<!-- コンポーネント定義 -->
<!-- 自動バインディング = property -->
<component name="autoDI" class="AutoDI" instance="singleton" autoBinding="property" />
<component name="message1" class="java.lang.String" instance="singleton" autoBinding="auto">
<arg>"メッセージ1です。"</arg>
</component>
<component name="message2" class="java.lang.String" instance="singleton" autoBinding="auto">
<arg>"メッセージ2です。"</arg>
</component>
</components>
|
AutoDI.java |
public class AutoDI {
private String message1;
// publicの場合、setterは不要。
public String message2;
// セッター
public void setMessage1(String message1) {
this.message1 = message1;
}
public String getMessage1() {
return this.message1;
}
public String getMessage2() {
return this.message2;
}
}
|
TestClass.java |
import org.seasar.framework.container.SingletonS2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
public class TestClass {
public static void main(String[] args) {
// S2Container初期化
SingletonS2ContainerFactory.init();
// コンポーネント取得
FieldDI fieldDI = SingletonS2Container.getComponent("fieldDI");
System.out.println(fieldDI.getMessage());
// S2Container破棄
SingletonS2ContainerFactory.destroy();
}
}
|
出力メッセージ |
メッセージ1です。
メッセージ2です。
|
propertyタグのbindingType属性で、プロパティごとに細かく制御することもできます。
bindingType | 説明 |
---|---|
must | 自動バインディングが適用されない場合、例外が発生します。 |
should(default) | 自動バインディングが適用されない場合、警告を通知します。 |
may | 自動バインディングが適用されない場合、何もおきません。 |
none | 自動バインディングは適用されません。 |