序文
SpringのIOCコンテナは非常に強力で、春の豆やその他の機能の作成と管理を担当しています。スプリングビーンズは、スプリングアプリケーション全体の重要な部分です。スプリングビーンズのライフサイクルを理解することは、スプリングフレームワーク全体を理解するための大きな助けになるでしょう。
BeanFactoryとApplicationContextは、Springの2つの重要なコンテナです。前者は依存関係の注入の最も基本的なサポートを提供しますが、後者は、イベントの伝播、リソースアクセス、国際的なメッセージアクセスなどの機能を追加するなど、前者の継承に基づいて機能を拡張します。この記事では、主に2つのコンテナApplicationContextとBeanFactoryに豆のライフサイクルを紹介します。
最初にライフサイクルチャートを見てください:
私たちがそれについて話す前に、ライフサイクルについて話しましょう:
春は、シングルトンモデルの豆の完全なライフサイクルを管理するのに役立ちます。プロトタイプの豆の場合、Springは作成されてユーザーに引き渡された後、その後のライフサイクルを管理しなくなります。
注釈方法
Beanを初期化するときは、いくつかの段階があります。まず、Annotation @PostConstructと@predestroyを使用して、Beanの作成と破壊段階でそれを呼び出すことができます。
@componentPublic class AnnotationBean {private final static logger logger = loggerfactory.getLogger(annotationbean.class); @postconstruct public void start(){logger.info( "annotationbean start"); } @predestroy public void Destroy(){logger.info( "AnnotationBean Destroy"); }}InitializingBean、DosuseableBeanインターフェイス
また、初期化と破壊段階でも呼ばれるInitialIngizingBeanとDosuperableBeanの2つのインターフェイスを実装することもできます。
@ServicePublic Class SpringLifeCycleservice IntializingBean、DisapleableBean {private final static logger logger = loggerFactory.getLogger(SpringLifeCycleservice.Class); @Override public void avidePropertiesset()スロー例外{logger.info( "springLifeCycleservice start"); } @Override public void Destroy()Throws Exception {logger.info( "SpringLifeCycleservice Destroy"); }}カスタムの初期化と破壊方法
また、初期化および破壊段階で呼び出しのメソッドをカスタマイズすることもできます。
@configurationPublic class lifecycleconfig {@bean(initmethod = "start"、destroymethod = "destroy")public springlifecycle create(){springlifecycle springlifecycle = new SpringLifecycle(); SpringLifecycleを返します。 }} public class springLifecycle {private final static logger logger = loggerFactory.getLogger(springLifecycle.class); public void start(){logger.info( "springLifecycle start"); } public void Destroy(){logger.info( "SpringLifecycle Destroy"); }}上記はこのようにスプリングブートで構成されており、元のXMLベースの場合にも使用できます。
<bean init-method = "start" destroy-method = "Destroy"> </bean>
同じ効果を達成するため。
*認識インターフェイスを実装します
*springコンテキストを取得するなど、豆を初期化するときに、春にいくつかのオブジェクトを取得するために、インターフェイスを使用して使用できます。
@componentPublic Class SpringLifeaWare ApplicationContextAware {private final static logger = loggerfactory.getLogger(springlifecycleaware.class); private ApplicationContext ApplicationContext; @Override public void setApplicationContext(applicationContext applicationContext)throws beansexception {this.applicationContext = applicationContext; logger.info( "springlifecycleaware start"); }}このようにして、SpringLifeaCycleaware Beanの初期化でSetApplicationContextメソッドが呼び出され、ApplicationContextオブジェクトを取得できます。
BeanPostProcessor強化プロセッサ
beanpostprocessorインターフェイスを実装します。春のすべての豆は、初期化時にインターフェイス内の2つの方法を呼び出します。これは、いくつかの特別な豆を処理するために使用できます。
@componentPublic Class SpringLifeCycleProcessorを実装するBeanPostProcessor {private final static logger logger = loggerFactory.getLogger(springlifecycleprocessor.class); / ** *前向き化の前に呼び出された * @param bean * @param beanname * @return * @throws beansexception */ @Override Public Object PostProcessBeasseForeInitialization(Object Bean、String Beanname)Throws BeanSexception {if( "annotationbean" .equals(beanname ") beanname = {} "、beanname); } return bean; } / ** *ポストイナイト化Bean初期化完全コール * @param bean * @param beanname * @return * @throws beansexception * / @override public object postprocessafterinitialization(object bean、string beanname)throws beansexcection {if( "annotationbean(beanname)) logger.info( "springlifecycleprocessor end beanname = {}"、beanname); } return bean; }}実行後の観察結果:
018-03-21 00:40:24.856 [RestArtedMain]情報00:40:24.861 [RestArtedMain]情報00:40:24.867 [RestartedMain]情報OSBDAOPTIONALLIVERELOADSERVER-LIVERELOAD SERVERはポート357292018-03-21 00:40:25.122 [RestartedMain]情報OSJEAANNOTATIONMBEANEXPORTER-STARTUP2018-03-21 00:40:40:25.140 [RESTERTEDMAINのJMX露出のために豆の登録com.crossoverjie.Application- 2.309秒でアプリケーションを開始(3.681で実行されているJVM) org.springframework.context.annotation.annotationconfigapplicationcontext@3913adad:起動日[水曜日3月21 00:40:23 CST 2018];コンテキストのルート階層のルート2018-03-21 00:40:25.155 [スレッド-8]情報osjeaannotationmbeanexporter-登録されていないJMXに曝露した豆をシャットダウンする2018-03-21 00:40:25.156 [スレッド-8]情報ccspring。 00:40:25.156 [スレッド8]情報ccservice.springlifecycleservice-springlifecycleservice Destroy2018-03-21 00:40:25.156 [Thread-8] info ccspring.Annotation.AnnotationBean-AnnotationBean Destroy
春のコンテキストが破壊されるまで、DisapleableBeanを実装するカスタム破壊方法とDestroy()メソッドが呼び出されます。
要約します
上記は、編集者によって導入されたスプリングビーンライフサイクルです。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!