11

間違った英語のせいか、@Autowired アノテーションを使用する利点が理解できませんでした。

チュートリアルによると、@Autowired を使用して、最初のケース (I.) を 2 番目のケース (II.) に単純化できます。

私の質問は、 @Autowired の意味は何ですか? @Autowired を使用しないと、コンパイラは "EmpDao emDao" と "EmpManager" が宣言に従って密接に関連していることを理解できるため、これ以上はわかりません。

ここから引用されたコード

私。

    <bean id="empDao" class="EmpDao" />
    <bean id="empManager" class="EmpManager">
       <property name="empDao" ref="empDao" />
    </bean>

public class EmpManager {

   private EmpDao empDao;

   public EmpDao getEmpDao() {
      return empDao;
   }

   public void setEmpDao(EmpDao empDao) {
      this.empDao = empDao;
   }

   ...
}

Ⅱ.

<context:annotation-config />

<bean id="empManager" class="autowiredexample.EmpManager" />
<bean id="empDao"     class="autowiredexample.EmpDao" />

import org.springframework.beans.factory.annotation.Autowired;

public class EmpManager {

   @Autowired
   private EmpDao empDao;

}
4

4 に答える 4

11

@Autowired春特有のものです。@Injectが標準相当です。@Injectこれは、オブジェクトをそのフィールドに設定しようとするようにコンテキスト (Spring、または任意の DI フレームワークの場合) に指示する注釈です。

コンパイラはこれとは何の関係もありません -実行時にオブジェクトをインスタンス化し、指定したポイントで依存関係を設定するのは DI フレームワーク (Spring) です - XML または注釈を介して。

注釈が付けられていなくても、DI フレームワークがすべてのフィールドに依存関係を注入しようとするシナリオが考えられることに同意します。(そして、特定のフィールドを除外したい場合は、それに注釈を付けます)。しかし、彼らは別の戦略 (慣例よりも構成) を選択しました。ところで:

  • xml 構成を使用して何らかの形式の自動配線を選択すると、Bean の依存関係は何も指定しなくても自動的に自動配線されます。
  • コンテキストごとの自動配線設定を指定できます。
于 2011-02-14T22:10:26.697 に答える
1

サーバーがそれ自体をブートストラップするとき。それは見つけます

 <context:annotation-config />

アプリケーションコンテキストで、コンテキストで定義されたクラスを通過します。オートワイヤーされた Bean がある場合は、コンテキスト ファイルを参照してそれをクラスに注入します。

基本的に、構成よりも規則を促進します。これは、最近のほとんどのフレームワークが開発時間を短縮するために行っていることです。

于 2011-02-14T22:13:13.637 に答える
1

@Autowired Spring アノテーションは、Spring 構成ファイルに empDao Bean をプロパティとして追加することなく、Spring に「empDao」という名前の Bean を指定し、それを EmpManager クラスに注入するように指示します。

于 2011-02-14T22:13:44.590 に答える
0

@Autowired は、Bean 名による明示的なルックアップを要求するのではなく、宣言されたタイプの Bean を見つけてその Bean に接続するように Spring に指示します。特定の状況下では、特定の Spring コンテキストでタイプの実装が 1 つしかない場合、アプリケーションの構成が簡単になります。

于 2011-02-14T22:12:03.123 に答える