1。春は何ができますか?
Springの主な目的は、J2EEを使いやすくし、優れたプログラミング習慣を促進することです。
反転制御コンテナスプリングのデザインコアは、Javabeansで動作するように設計されたorg.springframework.beansパッケージです。このパッケージは通常、ユーザーが直接使用するものではありませんが、より多くの機能サービスの基礎として機能します。次の高レベルの抽象化は「Bean Factory」です。 Spring Bean Factoryは、オブジェクトを名前で取得し、オブジェクト間の関係を管理できるようにする通常の工場です。 Bean Factoriesは2つのオブジェクトパターンをサポートしています。 Singleton:このパターンでは、特定の名前を持つ共有オブジェクトインスタンスがあり、見上げたときに取得されます。これはデフォルトであり、最も一般的に使用されます。ステートレスオブジェクトにとって理想的なパターンです。 .prototype:このモードでは、フェッチが取得されるたびに別のオブジェクトが作成されます。
2。スプリングスタートの読み込みと実装方法
最初のもの:@PostConstructと@predestroyメソッドに注釈を付けて、豆を初期化および破壊する前に操作を実装する
2番目のタイプ:XMLでinit-methodおよびdestory-methodメソッドを定義します
3番目のタイプ:beanを介して初期化を実装し、beanとdusisuperablebeanインターフェイスを実装します
4番目のタイプ:BeanPostProcessorインターフェイスを実装するクラスを作成します。このインターフェイスには2つの方法があります。
(1):春に定義された豆が春に定義される前に、春に定義された豆が初期化される前に、ポストプロセスベーフルイニタレイズ法、この方法を呼び出します
(2):春に定義されたBeanが初期化または初期化された後、この方法または実装を呼び出してください。
InstantiationAwareBeanPostProcessorは、BeanPostProcessorのサブインターフェイスです
スプリングコンテナがロードされた後に実行します
エントリとして春のリスナーから。
org.springframework.web.context.contextloaderlistener
スプリングを初期化する方法を見つけます
/***ルートWebアプリケーションのコンテキストを初期化します。 */ @Override public void contextInitialized(servletcontextevent event){initwebapplicationContext(event.getServletContext()); }initwebapplicationContextメソッドを入力します
if(this.context == null){this.context = createwebapplicationContext(servletcontext); } if(this.context instanceof configurablewebapplicationContext){configureablewebapplicationContext cwac =(configureablewebapplicationContext)this.context; if(!cwac.isactive()){//コンテキストはまだ更新されていません - >親コンテキストの設定、アプリケーションコンテキストIDの設定などのサービスを提供する場合(cwac.getParent()== null){//コンテキストインスタンスは、明示的な親 - > //ルートウェブアプリケーションのコンテキストを決定しました。 applicationContext parent = loadparentContext(servletContext); cwac.setParent(親); } configureAndrefreshwebapplicationContext(cwac、servletcontext); }} ApplicationListener
1.アプリケーションListenerを実装するリスナークラスを書きます。
Import org.springframework.context.applicationlistener; Import org.springframework.context.event.contextrefreshedevent; Import org.springframework.stereotype.service; onapplicationEvent(contextrefreshedevent event){if(event.getApplicationContext()。getParent()== null)//ルートアプリケーションコンテキストには親がいません、彼はボスです。 {//実行する必要がある論理コードは、スプリングコンテナが初期化された後に実行されます。 System.out.println( "/n/n/n/n/n/n ______________/n/n/n loaded/n/n _________/n/n"); } //または次の方法(event.getApplicationContext()。getDisplayName()。 }}}2。構成ファイル(applicationContext-servlet.xml)にサービススキャンパッケージを設定します
<! - 登録@Controller、@Service-> <Context:Component-ScanBase-Package = "com.test.controller" use-default-filters = "false"> <context:incluge-filter = "annotation" expression = "org.springframework.stereototy.controller" />> < expression = "org.springframework.stereotype.service" /> < /context:component-scan>
3。スタートアッププロジェクトを展開し、春がロードされた後に「ロード」を印刷します
MVCを使用した後のApproactOntextとwebApplicationontextは、上記のメソッドを2回呼び出します。これら2つのコンテナを区別する方法は?
しかし、現時点では問題があります。 Webプロジェクト(SpringMVC)では、システムに2つのコンテナがあります。1つはrootApplicationコンテキストであり、もう1つは私たち自身のProjectName-ServletContextです(rootApplicationコンテキストのサブコンテナーとして)。
この場合、OnApplicationEventメソッドが2回実行されます。上記の問題を回避するために、rootApplicationコンテキストが初期化された後にのみ論理コードを呼び出すことができます。他の容器の初期化が完了した場合、処理は行われません。変更されたコードが完了すると、コードが変更されます。
次のように:
@Override public void onapplicationEvent(contextrefreshedevent event){if(event.get.ApplicationContext()。getParent()== null){// rootアプリケーションコンテキスト親はいません、それはボスです。 //実行する必要がある論理コードは、スプリングコンテナが初期化されたときに実行されます。 }}初期化の順序は次のとおりです。
constructor> @postconstruct> initializingbean> init-method
要約します
上記は、この記事のSpring Frameworkの最初の分析に関するものです。誰にとっても役立つことを願っています。質問がある場合は、いつでもメッセージを残すことができ、編集者はすべての人に時間内に返信します。このサイトへのご支援をありがとうございました!