2017-03-21 1 views
1

XMLプロパティインジェクションは、春の一種の依存性注入ですか?上記に示した、プロパティ "MSG" として

<bean name="helloWorld" class="com.company.HelloWorld"> 
    <property name="msg" value="messaging"/> 
</bean> 

JAVA

package com.company; 

// ... 

public class HelloWorld { 
    private String msg; 
    public void setMsg(String msg) { this.msg = msg; } 
} 

Iは、 "プロパティ・インジェクション" として理解 "setMsg" 法によって "this.msg" に注入されます。私が心配している限り、SpringのDIはクラスを分離するように推進されましたが、上記のコードはプロパティを注入するだけです。そして、私は、プロパティインジェクションが春のDIに基づいているのだろうかと思います。誰かが私を助けてくれることを願います。 ( - 春これは、手動またはDIコンテナによってあなたの場合と同様に行うことができる)外部から設定されている:

答えて

0

注射は、(単純な文字列あなたの場合)に必要な依存関係があることを意味します。したがって、あなたのクラスは "msg"の値がどこに設定/取得されているか知る必要はありませんが、(作成時に)正しい値を受け取ることがわかります。

は、あなたの質問に答えるために:はい、プロパティの注入は依存性注入の一種です。もう1つの可能性(これは通常は優先されます)はコンストラクタインジェクションです。コンストラクタインジェクションでは、コンストラクタ内のすべての依存関係を宣言する必要があります。 DIフレームワーク(春)は、オブジェクトの構築時の依存関係を注入...

0

私に関する限り、SpringのDIは、単にプロパティを注入するクラス、 が、上記のコードを分離するために昇進しました。そして、私は プロパティインジェクションが春のDIに基づいているのかどうか疑問です。

は、あなたのHelloWorldクラスがLanguageHelperと呼ばれるいくつかの他のインターフェイスに依存していると仮定し、その後、実行時に動的にLanguageHelperの実装を注入することができる(Springコンテナを作成/クラスパス上で見つかった場合、これらのクラスのオブジェクトを管理します) 、ちょうど以下に示すようにXMLでの実装クラス名を指定して(または、注釈を使用することができます):あなたのケースで

<bean id = "helloWorld" class = "com.company.HelloWorld"> 
     <property name = "languageHelper" ref = "languageHelper"/> 
</bean> 

<bean id = "languageHelper" class = "com.company.LanguageHelperImpl"></bean> 

しかし、を、それはあなたが動的にBeanにを注入するシンプルString値であります実行時に(あなたのクラスのハードコーディングではなく)。したがって、と評価される追加の依存関係がない注入であり、提供されるsetterメソッドを使用して値を設定するだけです。

したがって、これは、内部で直接ハードコーディングするのではなく、将来の変更のクラスに対して、クラスを簡単に結合する方法(単純な値または他のクラスの実装でもよい)についてです。

0

マーティン花"Inversion of Control Containers and the Dependency Injection pattern"は、Controlデザインパターンの反転についての素晴らしい読まれるべきです。マーティン花のポストを1として

、注入は、コンストラクタ、セッターインジェクションとインタフェースを使用して発生する可能性があります。 Springは3つの噴射パターンをすべてサポートします。