注目の問題の(ターン)@Autowired(必要= false)を注入

1はじめに

開発プロセスを使用して春に、我々は、基本的に、この注釈は、既存ビーンを注入するために使用される@Autowiredを使用します。しかし、時には、それは注入失敗します。我々はパラメータ(必要= false)を追加すると解決することができます。今日、私はの開発に実用的な例を終えています

2、必要な属性

  • @Autowired(=真必須):Beanが存在しなければならないとき@Autowiredノートを使用している場合、実際には、デフォルトは(=真必須)@Autowiredされるが、それ以外の場合は、注射を失敗し、充填しました。

  • @Autowired(=偽必須):Beanを注入する電流を無視することを示し、直接注射がある場合、スキップせず、文句ありません。

使用して3、

我々は、サービスにマッパーを注入し、コントローラ層に通常噴射サービスを使用します。

一般的な方法がある場合しかし、あなたは、要素、および共通モジュールで、このメソッドを注入する必要があります。モジュールが他の項目の中に導入されると、アイテムが注入されるとBeanは、所望に示すように、同様のエラー[2]が表示されます。そこで問題は、我々はプロジェクト全体のエラーを作り、クラスを噴射するプロジェクトを必要としませんさ。

4、原因を分析し、対応

コンテナの起動時に春のコア(IOC)の一つであり、多くの豆を、初期化します。しかし、注射の際に、強制的に注入に注入し、見つけることができませんでした、Beanを注入する一般的な方法へのスキャンが失敗します。私たちは、一人で除去する方法を変更することはできませんので、我々は無注入されていない、という考えは、注入するBeanを持つことである取ります。解決策は@Autowired(=偽必要)です。

5、父と息子の容器との間の関係

ログによって示されるように:

我々は、ログを起動シーケンスコンテナを見ることができます。

  • 最初のサブコンテナ(springmvc)をロードした後、親コンテナ(スプリング)を読み込みます。したがって、コントローラは、サービス内部に注入され、親豆容器は、通常注射を初期化されています。
  • 親子容器、容器は、サブタンク親コンテナの要素が見えない、見え親コンテナ要素の対です。だから、子コンテナの親コンテナ素子を得ることができないが、子は親コンテナのコンテナ要素を取得することができます。
  • 当前容器均可获取当前容器中的元素,也就是说在service中可以注入其他service。

但是,当前容器不可以注入自己。这样就会不停的注入自己,陷入死循环。从而找不到要注入的bean。如图:

 

おすすめ

転載: www.cnblogs.com/cat520/p/11703313.html