春ブーツ2.xの:SpringBoot

 

いくつかの重要なイベントのコールバックメカニズム:

 

1 に配置され、META-INF / spring.factories

 

ApplicationContextInitializer

 

SpringApplicationRunlistener

 

図2は、配置する必要がIOCのコンテナ

 

     3 ApplicationRunner

 

     4 CommandLineRunner

 

まず、作成 SpringApplicationのオブジェクトを

 

迅速で、プロジェクトを作成し SpringBootApplicationの、クラスのメインのエントリークラスとしてメソッドRUN マークされたブレークポイント()メソッド、デバッグ実行を、

公共SpringApplication(ResourceLoader resourceLoader、クラス<?> ... primarySources){

    // マスター構成クラスを保存    

this.resourceLoader = resourceLoader。

    Assert.notNull(primarySources、 "PrimarySourcesがnullであってはなりません")。

    this.primarySources =新しいLinkedHashSetの<>(は、Arrays.asList(primarySources));

    // 現在のかどうかを判断するのWeb アプリケーション

    this.webApplicationType = WebApplicationType.deduceFromClasspath()。

    // クラスのシステムからのパスを見つけるMETA-INF / spring.factories 設定されたすべてのApplicationContextInitializerを、それを保存

    setInitializers((コレクション)getSpringFactoriesInstances(ApplicationContextInitializer.class));

    // クラスのシステムからのパスを見つけるMETA-INFを/ spring.factories すべての設定をApplicationListener

    setListeners((コレクション)getSpringFactoriesInstances(ApplicationListener.class));

    //はから複数のクラスが配置されている見つけるマスター構成クラスのメソッド

    this.mainApplicationClass = deduceMainApplicationClass()。

}

第二に、実行し、実行方法

 

当時続けました:

公共ConfigurableApplicationContextラン(文字列...引数){

    ストップウォッチストップウォッチ=新しいストップウォッチ();

    stopWatch.start();

    ConfigurableApplicationContextコンテキスト= NULL;

    コレクション<SpringBootExceptionReporter> exceptionReporters =新しいArrayListを<>();

    configureHeadlessProperty();

    // 取得SpringApplicationRunListenersをクラスパスから、メッタ-INF / spring.factories

    SpringApplicationRunListenersリスナー= getRunListeners(引数)。

    // コールバックすべてのSpringApplicationRunListeners.starting 方法

    listeners.starting();

    {試します

        // コマンドラインパラメータをパッケージ化

        ApplicationArguments applicationArguments =新しいDefaultApplicationArguments(引数);

        // 環境を準備

ConfigurableEnvironment環境= prepareEnvironment(リスナー、applicationArguments)。

        // 完了コールバックが後に環境を作るSpringApplicationRunListeners.environmentPrepared)(; 周囲の準備ができています

configureIgnoreBeanInfo(環境)。

バナー= printedBanner印刷バナー(環境)。

        // 作成ApplicationContextの作成することを決めた、ウェブIOC または通常のIOCを

コンテキスト= createApplicationContext()。

exceptionReporters = getSpringFactoriesInstances(SpringBootExceptionReporter.class、

新しいクラス[] {ConfigurableApplicationContext.class}、コンテキスト)。

        // ;コンテキストを準備環境がために保存されているIOC に、そしてapplyInitializers ()

        applyInitializers //() すべての以前に保存されたコールバックApplicationContextInitializer 初期化方法

        // コールバックすべてSpringApplicationRunListeners.contextPrepared ()

prepareContext(コンテキスト、環境、リスナー、applicationArguments、printedBanner)。

        // prepareContextのすべてのコールバック完了後に実行SpringApplicationRunListeners contextLoaded ()

        // リフレッシュ容器と、IOCのコンテナの初期化(場合のWeb アプリケーションが埋め込ま作成するTomcatを); 春のコメント

        // 、スキャン、作成負荷がすべてのコンポーネントを配置します。(設定クラス、コンポーネント、自動設定)

refreshContext(コンテキスト)。

        // から、IOCはすべてのコンテナを取得ApplicationRunner CommandLineRunner コールバック

        // ApplicationRunner 最初のコールバック、CommandLineRunner 再びコールバック

 

afterRefresh(コンテキスト、applicationArguments)。

stopWatch.stop();

IF(this.logStartupInfo){

    新しいStartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog()、ストップウォッチ);

}

        (コンテキスト)listeners.started。

callRunners(コンテキスト、applicationArguments)。

    }

    キャッチ(ThrowableのEX){

handleRunFailure(コンテキスト、EX、exceptionReporters、リスナー)。

新しいIllegalStateExceptionを(EX)を投げます。

    }

 

    {試します

        listeners.running(コンテキスト)。

    }

    キャッチ(ThrowableのEX){

        handleRunFailure(コンテキスト、EX、exceptionReporters、NULL);

        新しいIllegalStateExceptionを(EX)を投げます。

    }

    // 全体SpringBootのアプリケーションの起動が完了している外国為替リベートリターンの開始後にIOCのコンテナ

    コンテキストを返します。

} 第三に、イベントリスナー機構

作成するために、いくつかのメカニズムの上にモニターの電源を入れ、

HelloApplicationContextInitializer

パブリッククラスHelloApplicationContextInitializer実装ApplicationContextInitializer <ConfigurableApplicationContext> {

    @オーバーライド

    公共のボイドのinitialize(ConfigurableApplicationContextのApplicationContext){

        System.out.println( "ApplicationContextInitializer ...初期化..." +のApplicationContext)。

    }

}

HelloSpringApplicationRunListener

パブリッククラスHelloSpringApplicationRunListener実装SpringApplicationRunListener {

    

    公共HelloSpringApplicationRunListener(SpringApplicationアプリケーション、文字列[]引数){

 

    }

 

    @オーバーライド

    公共ボイド開始(){

        System.out.println( "SpringApplicationRunListener ...始まります...");

    }

 

    @オーバーライド

    公共のボイドenvironmentPrepared(ConfigurableEnvironment環境){

        = environment.getSystemProperties Oオブジェクト()( "os.name")を取得します。

        System.out.println( "SpringApplicationRunListener ...環境" + O)。

    }

 

    @オーバーライド

    公共ボイドcontextPrepared(ConfigurableApplicationContextコンテキスト){

        System.out.println( "SpringApplicationRunListener ... contextPrepared");

    }

 

    @オーバーライド

    公共ボイドcontextLoaded(ConfigurableApplicationContextコンテキスト){

        System.out.println( "SpringApplicationRunListener ... contextLoaded");

    }

 

    @オーバーライド

    公共のボイド開始(ConfigurableApplicationContextコンテキスト){

        System.out.println( "SpringApplicationRunListener ...開始");

    }

 

    @オーバーライド

    公共のボイドランニング(ConfigurableApplicationContextコンテキスト){

        System.out.println( "SpringApplicationRunListener ...実行しています");

    }

 

    @オーバーライド

    公共ボイド失敗(ConfigurableApplicationContextコンテキストのThrowable例外){

        System.out.println( "SpringApplicationRunListener ...失敗");

    }

    

 

}

HelloApplicationRunner

@成分

パブリッククラスHelloAppicationRunner実装ApplicationRunner {

    @オーバーライド

    ます。public void実行(ApplicationArgumentsのargsが){例外がスローされます

        System.out.println( "ApplicationRunner ...ラン..");

    }

}

HelloCommandLineRuinner

@成分

パブリッククラスHelloCommandLineRunner実装CommandLineRunner {

 

    @オーバーライド

    ます。public void実行(文字列... argsが){例外がスローされます

        System.out.println( "CommandLineRunner ...ラン..." +は、Arrays.asList());

    }

}

前述の ApplicationContextInitializer SpringApplicationRunlistener 必要性の設定、内の位置に配置されているMETA-INF / spring.factories ので作成し、META-INFのフォルダーを作成spring.factoriesの、ファイルを

org.springframework.context.ApplicationContextInitializer = \

com.itlaoqi.springbootspringbootapplication.listener.HelloApplicationContextInitializer

 

org.springframework.context.SpringApplicationRunListener = \

com.itlaoqi.springbootspringbootapplication.listener.HelloSpringApplicationRunListener

設定が完了した後にテストすることができるプロジェクトを開始します。

オリジナルリンク: https://blog.csdn.net/cyl101816/article/details/103582373

おすすめ

転載: www.cnblogs.com/benming/p/12066946.html