背景及び概要
春springMVCビーン・オブジェクトがIOCを介して管理することができるでは、IOCを構成することができる2つのプロファイルが存在します
春のコンフィギュレーションファイルapplicationContext.xmlをする
のプロファイルspringMVC.xml springMVC
作業我々はレパートリーのBeanオブジェクトサービス層と層の管理、およびspringMVCは、コントローラを管理するためにできるように、スプリングを使用しています。
そして、それは自然に質問を次の?
図1は、制御装置、サービス、DAOを含む、BeanオブジェクトコンフィギュレーションファイルspringMVC.xml springMVCの全てを管理することができますか?
図2は、制御装置、サービス、DAOを含む、BeanオブジェクトコンフィギュレーションファイルapplicationContext.xmlをばねの全てを管理することができないのですか?
答えはこれです
SpingMVCは、構成ファイルで使用することができ、Beanオブジェクトのすべてを管理するのではなく、コントローラを管理するためのバネを使用することはできません。
これはなぜでしょうか?
春とSpringMVC親子関係コンテナ
コアコンセプト春の全体的な枠組みでは、容器は、核となるアイデアは、豆全体のライフサイクルを管理するために使用され、プロジェクト内で、必ずしも唯一の容器は、スプリングは複数の容器を含むことがあり、容器は、上下有します関係、最も一般的なシナリオは、プロジェクト内のこれら2つのフレームワーク春とSpringMVCの導入で、それは実際には二つの容器で、春には親コンテナで、SpringMVCはその子で、春の親コンテナに登録しますSpringMVCビーンコンテナが表示され、春の豆の親コンテナのSpringMVCコンテナに登録されているため、親コンテナ船を見ることができる子は逆にはできない、豆を登録、つまり、表示されません。
春とspringMVCの詳細
ばねは、IOC容器であるサブコンテナがコンテナをspringIOCとしてspringMVCを見ることができ、子コンテナには、独自のロジック及び方法を有しています。1つの非常に重要なものは以下のとおりです。次のように構成されてHandlerMapper(プロセッサマッパー)、およびHandlerAdapterがある(プロセッサアダプタ):
<! -注釈プロセッサマッパーの最新バージョンを設定します- >
<beanは、クラス= "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMappingは"> </ beanが>
<! -最新バージョンを設定しますアダプタ・プロセッサアノテーション- >
<beanクラス= "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> </ビーン>
。1
2
。3
。4
、または注釈が自動的にロード駆動するために利用されてもよいです。
<! -注釈ドライブ:
役割:私たちは、自動的にマッピングし、注釈プロセッサハンドラアダプタの最新バージョンを設定するために
- >
<MVC:アノテーション・ドリブン> </ MVC:アノテーション・ドリブン>
。1
2
。3
。4
注目すべきはHandlerMapper関数マッピング分析方法をコントローラにspringMVCのURLで呼び出したときに、HandlerMapperは、子コンテナを探しているspringMVCコンテナコントローラ、見ていきます、親コンテナの春のコンテナを探して行っていないので、とき春applicationContext.xmlをコントローラを構成した後のページにアクセスする際に、404エラーが発生します。
のは、どのような要約してみましょう
私たちは春に知っている、と親子関係springMVCコンテナだけでなく、公式によると後に登録されたスキャンの原理は、我々は非常によく別のコンテナ管理に割り当てられた豆の種類を置くことができることを示唆しました。その後、豆を見つけることができないという問題点があるか、並びに構成SpringMVCトランザクションの失敗をジャンプすることはできません
https://blog.csdn.net/u010758410/article/details/79950801
彼は、コンテナ内の父と息子の前に、我々は最初のコンテナであるかを理解言いました:
java容器:
オブジェクトは、オブジェクト間の依存関係をライフサイクルを管理することができます。また、オブジェクト名、属性、生成方法を設定することができます。プログラマは、管理するための独自のプログラムを記述する必要はありません。
一般的に使用されるコンテナのJavaクラス:リスト、HashMapの、ハッシュテーブルが好き。
spring容器:
その合計値アップブロガーを借ります:
たBeanFactoryとApplicationContextの、ApplicationContextのがたBeanFactoryのサブインターフェイスである:ばねは2つのコアインターフェイスを有しています。彼らは、春のコンテナがBeanインスタンスファクトリを生成している、春のコンテナの代表者であること、およびコンテナ豆を管理することができます。
Beanが管理スプリング、スプリングベースのJava EEアプリケーションの基本単位であり、すべてのコンポーネントがBeanとして処理され、データソースのSessionFactory、トランザクション・マネージャなどの休止状態を含みます。春には、豆は、任意のJavaオブジェクト、Javaコンポーネントは豆として扱われ、非常に広い概念です。
ポイントを取得、その後、コンテナが何であるかを理解します:
プロジェクトのSSMフレームワークは、コンテナは、必ずしも私が学んでいる取っただけではない。春には、このようなspringmvcコンテナなどの容器、を複数有していてもよいです。プロジェクトをビルドするとき、私たちは、コンフィギュレーションの多くを行っています。
たとえば、次の構成springmvc.xmlスキャンパッケージ、スキャニングコントローラ注釈です。(MVCの後ろ:アノテーション駆動代表の注釈駆動型を使用するには、次のように書くことができません)
別の例:service.xmlににに注釈サービスをスキャンするスキャンパッケージを設定
その質問が来た春のコンテナは、私はグローバルスキャンサービス/ DAO /コントローラにパッケージを書き込むことができ、大きなコンテナであることから、春のコンテナそれにスキャンされますか?これはそんなにxmlファイルなしで、もう少し便利な構成ではないでしょうか?
この問題に対処するために、我々は学ぶために一緒に動作します。
春はまた、コンテナ、springmvcコンテナです。それらの間の親子関係二つの容器。春の容器を含むspringmvcサブコンテナ。次のようにプロジェクト内の構成は以下のとおりです。
(大型コンテナである)初期srpingコンテナリスナーのロード:私たちは、web.xmlに春のコンテナを構成し
また、フロントエンドコントローラを備えた:( springmvcされた容器のspringmvcに含まれる。Springmvcスプリング)を容器内に収容されています
springmvc容器のばね容器内service.dao、コントローラ:それと同等です。
次のように息子の容器の規則は以下のとおりです。
1、サブタンクは、親オブジェクトコンテナにアクセスできます。
すなわち、サービスは、コントローラ内に注入することが可能です。
しかし、その後、コントローラは、サービスの中に注入することはできません。
当然のことながら、容器内のサービスコントローラ場合、注入されます。
図2に示すように、親血管は、サブコンテナオブジェクトにアクセスしなくてもよいです。
私たちは、コントローラ、春のコンテナがサービスする、でspirngでグローバルスキャンパッケージを構成する場合、DAOは、この大血管の春にスキャンされています。これはspringmvcは何のオブジェクトがないだろう、つながる、ページが対応するアクセスコントローラを見つけることができない、それは404エラーを報告します。
我々はspringmvcスキャンパッケージに書いた場合、逆に、サービス、DAO(つまり、削除.controller spingmvc.xmlスキャンパッケージである)でspringmvcに注入されても問題ありません。またspringmvc春のコンテナので。
3、なぜ我々はそれspringmvc春を追加する必要がありますか?
もちろん、システムの将来の拡張を容易にするためです。春には、複数のフレームを統合するので、我々は戻ってコンテナ内のスプリングの支柱に参加したい場合は、も可能であることができます。
4、我々は中にコントローラの設定にトランザクションを置くことができますか?
親コンテナがコンテナのアクセスspringmvcサブコントローラがない場合に、トランザクション・マネージャは、バネで構成されているためspirng + springmvcこのフレームワークは、可能ではない場合。そうではありません。
パッケージはすべてspringmvcをスキャンするように構成されている場合しかし、その後、コントローラは設定トランザクションです。
そのため、以下の結論:使用service.xmlにして構成されていないグローバルスキャンパッケージ。
コンテナの父と息子を学び、我々はフレームワークを構築するとき、私が何のエリアを設定するには、設定したいのか、知っているのは簡単だろう。これは、フレームワークの原則をより深く理解することになります。
課外で展開します。
私はオンラインの息子の容器を探していたとき、彼らは2つの派閥の構成コンテナの使用を発見しました。
最初のキャンプ:伝統と呼ばれる友人が、春+ springmvc構成です。そして、私は上記のように同じことを言います。何も言うことはありません
二学校:ラジカルと呼ばれる、つまり、すべてのものがspringmvcするように設定されているが、プロジェクトのデータソースラ、ラ・総務、DAOこと、サービスを全範囲の作るために、サービスやインターフェースのDAO層はありません、子コンテナに設定されていますインチ
https://blog.csdn.net/lishaoran369/article/details/57073715