0

春 @Autowired

Spring @Autowired アノテーションに疑問があります。助けてください...

Spring mvc で @Autowired をこの順番で試したところ

コントローラ--->サービス--->Dao

つまり、コントローラでは Service Class Object を自動配線し、Service Class Autowire Dao Object では自動配線しました。

このインジェクションチェーンは完璧に機能します。

同様に strutrs2+Spring で @Autowired Annotation をこのように適用しました

アクション--->サービス->ダオ

このインジェクション チェーンも正常に動作します。

このチェーンの外側から関数を呼び出した場合 (例: Custom Taglib クラス (jsp から)) を Service クラスの関数に呼び出すと、この Service クラスでは Autowired dao オブジェクトが null になります (つまり、この呼び出しはチェーンを中断します)。

私の質問は

この @Autowired はインジェクション チェーンでのみ機能しますか?

4

1 に答える 1

1

d フィールドを持つ@AutowireBean は、Spring Bean Postprocessor を介して送信される場合にのみ設定されます。つまり、あなたが言ったように、自分で自動配線する場合です。これが、コンストラクター注入がフィールド注入よりもはるかに好まれる大きな理由です。する代わりに

@Service
public class MyService {
     @Autowired
     private MyDao dao;

     ...
}

やったほうがいい

@Service
public class MyService {
    private final MyDao dao;

    @Autowired
    public MyService(MyDao dao) {
        this.dao = dao;
    }
}

そうすれば、後処理されるサービスに依存できない状況にある場合 (jsp タグ ライブラリを使用する場合のように)、MyDaoオブジェクトを使用して新しいインスタンスをインスタンス化するだけで、あなたの陽気な方法。

于 2016-09-02T20:44:38.060 に答える