1

Spring のドキュメントを読んでいるときに、ちょっと考えさせられるテキストに出くわしました。

getBean() を使用して、Bean のインスタンスを取得します。ApplicationContext インターフェイスには、Bean を取得するためのメソッドが他にもいくつかありますが、理想的には、アプリケーション コードでそれらを使用しないでください。実際、アプリケーション コードには getBean() メソッドの呼び出しがまったくないため、Spring API への依存はまったくありません。

さて、xml ファイルで Bean を構成しました。しかし、必要なときにそれらを取得する必要があります。getBean() メソッドなしでそれを行うにはどうすればよいですか? 説明が詳しいほど良いです。

4

3 に答える 3

0

少し前に、さまざまな入力ファイル形式を処理できる汎用パーサーを書きました。

class XmlFormat extends Format {
    // format stuff
    // ...
}

class Parser {
    Format format;

    public Parser(Format format) {
        this.format = format;
    }

    // parsing goes here
    // ...
}

次に、どのフォーマット記述を使用するかを Spring に指示しました。(免責事項: Spring 構成のスタイルは大きく異なる場合があります。)

<bean id="forma1" class="com.mycompany.XmlFormat" />

<bean id="parser" class="com.mycompany.Parser">
    <constructor-arg ref="format1">
</bean>

そのため、Spring に を渡してほしいと思ったとき、Springはコンストラクターに をParser注入しました。XmlFormat

于 2011-02-26T12:27:28.710 に答える
0

コマンドラインプログラムのメインクラスなど、Spring によって作成されていないクラスから Spring Bean にアクセスする場合は、何らかの方法で Spring Bean を取得する必要があり、そのために getBean メソッドを使用します。

ただし、Spring Bean 自体がこの機能を必要とすることはめったにありません。必要な他の Bean をコンストラクター引数またはセッター メソッドを介して提供するのは Spring の責任であるためです (これは依存性注入の背後にある基本的な考え方です)。

于 2011-02-26T12:05:30.207 に答える
0

基本的な考え方は、「電話をかけないでください。電話します」ということです。つまり、コードは Spring IOC (Inversion of Control) コンテナーに Bean を要求するのではなく、コンテナーが Bean をコードに挿入します。インジェクションは、xml 構成ファイルまたは注釈を使用して構成されます。詳細については、たとえばthisおよびthisを参照してください。また、リファレンス マニュアルの第 3 章全体を読むことをお勧めします (おそらく行っているように)。

ApplicationContext-interface を使用すると、プログラムで Bean を要求することができます。これは、他のフレームワークなどと統合する場合など、特別な場合に必要になる場合があります。

于 2011-02-26T11:59:57.037 に答える