マスターへのSpringBootエントリ:( B)は原理を解析を開始します

ここに画像を挿入説明

序文

私たちは迅速かつ簡単に、自動設定を行うためのSpringBoot経験の前には、だけではない、あまりにも良い、我々は助けるが、不思議ではないことができますので、最終的に私たちは何を探求するために協力しましょう、それを行う方法で、前に比べてプロファイルを複雑


テキスト

私たちは春ブーツ任意のプロジェクトを開発している、起動クラスとして使用されます

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

上記のコード、注釈の定義(@SpringBootApplication)およびクラス定義(SpringApplication.run)最もまぶしいからわかるように、そうSpringBootを分かりやすく説明するために、我々はこれら二つがそれを開始したいです。

@ SpringBootApplication:春はSpringBootのメインクラス構成で、SpringBootはSpringBootアプリケーションを起動するには、このクラスのmainメソッドを実行する必要があり、このクラスのクラス上のブートアプリケーション命令をマークし、
彼のソースを見て:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
      @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
      @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

定義はより多くの注釈オリジナルラベル情報を使用されてきたが、SpringBootApplicationは、それが唯一の3注釈重要であり、ノートの組み合わせです:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

私たちは次のようにSpringBootクラスを使用して起動するのであれば、クラス全体が開始SpringBootアプリケーションことができ、まだ関数の前などのように:

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

それぞれの書き込みは3より疲れて、とても@SpringBootApplication便利なポイントを記述します。次のセクションでは、これら3つの注釈を記述します。

1. @ SpringBootConfiguration:ブートの設定クラスの春。

クラスにマークされ、彼はそれが春のブート構成クラスであると言いました。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}

@Configurationした後、それが使用される構成クラスの構成コンテナJavaConfigフォーム@春Iocのあることを、私たちには見知らぬ人、SpringBootは、それ自体、@Configurationマークされたクラスを開始するので、ここでは、JavaConfigコミュニティベースの構成をお勧めしますコンフィギュレーションクラスは、実際にIoCコンテナです。Configurationクラスは、アセンブリのコンテナです。@Component

違いとレビュー、XMLコンフィグ設定の下でいくつかの簡単な例:

発現レベルのフォーム
のXML構成方法に基づいて、この次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
       default-lazy-init="true">
    <!--bean定义-->
</beans>

JavaConfigベースの設定はこれです:

@Configuration
public class MockConfiguration{
    //bean定义
}

どれマークされたJavaクラス定義は@Configuration JavaConfig構成クラスです。

サイン豆定義されたレベル
XML形式の設定に基づいてはこれです:

<bean id="userService" class="..UserServiceImpl">
    ...
</bean>

フォームベースの設定JavaConfigはこれです:

@Configuration
public class SpringConfiguration{
    @Bean
    public UserService userService(){
        return new UserServiceImpl();
    }
}

Beanがメソッド定義された豆のIDに春のIoCコンテナ、デフォルトの名前を登録してマークされ@Bean任意の方法、戻り値は定義されます。

発現レベル依存関係注入
典型的にはXML形式で、豆とビーン間の依存関係を表現するためです。

<bean id="mockService" class="..MockServiceImpl">
    <propery name ="dependencyService" ref="dependencyService" />
</bean>

<bean id="dependencyService" class="DependencyServiceImpl"></bean>

フォームベースの設定JavaConfigはこれです:

@Configuration
public class SpringConfiguration{
    @Bean
    public UserService userService(){
        return new UserServiceImpl(dependencyService());
    }
    
    @Bean
    public DependencyService dependencyService(){
        return new DependencyServiceImpl();
    }
}

あなたは、Beanが他のBeanに依存しているクラスJavaConfigを定義した場合、直接それに対応する依存豆の作成メソッドを呼び出します。


2. @ ComponentScan:自動設定機能をオンにします。

このコメントはComponentScan関数@実際に自動的にスキャンし、負荷コンポーネントまたはビーン定義、最終的にこれらのビーン定義(例えば@Componentと@Repository等として)修飾されたXMLコンフィギュレーションの要素に対応し、春、で非常に重要である@ComponentScan IOCはコンテナにロードされました。

当社は、きめ細かいできbasePackages自動スキャンすることにより、カスタム@ComponentScanなどの属性の範囲を、指定されていない場合、デフォルトはクラス宣言@ComponentScan liesからスキャンパッケージを達成するために、Springフレームワークとなります。

:デフォルトではbasePackagesに指定されていないので、そうSpringBootは、最良のルートパッケージに配置されたクラスを開始します。

3. @ EnableAutoConfiguration ;自動設定機能をオンにします。

そして@; SpringBootの理由が自動的に設定するために私たちを助けるために、我々が設定されていたもの、そのコアは@EnableAutoConfigurationこの注釈で、春ブーツゼロコンフィギュレーションかもしれEnableAutoConfiguration SpringBootは、自動設定機能を開いて教えて、自動設定を有効にするために、
あなたは覚えていればSpringフレームワークは@Enableと注釈の定義を始まる名前を数多く提供していますか?例えば、@ EnableScheduling、@ EnableCaching、@ EnableMBeanExportなど、物事のEnableAutoConfigurationのアイデアや方法@実際には同じ株で
支援を受けて** Bean定義を収集し、登録のインポート@ **特定のシーンに関連する、という簡単な概要。
スケジューリング・フレームワークスプリングビーン定義は、関連するIoCコンテナにロードされることにより、@importを@EnableScheduling。
@EnableMBeanExport IOCはJMXビーン@import関連する定義を介して容器内に装填されます。
そしてまた@EnableAutoConfiguration @importの助けを借りて自動的に構成しIoCコンテナ、そして何よりもの基準を満たすすべてのBean定義をロードします!

@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

@ AutoConfigurationPackage自動構成パッケージ:

@ インポート(AutoConfigurationPackages.Registrar.class):

アセンブリに容器に導入されたスプリングの注釈@import;成分により導入AutoConfigurationPackages.Registrar.classここで、全ての一次パッケージ構成のクラスのすべてのコンポーネント(@SpringBootApplicationクラスラベル)とスキャンスプリング容器内部の下部サブパケット。

@ インポート(EnableAutoConfigurationImportSelector.class)。

コンテナへのインポート・コンポーネント?

EnableAutoConfigurationImportSelector:アセンブリセレクタを導入しました。

導入された完全なクラス名のやり方を返すために必要なすべてのコンポーネント、これらのコンポーネントがコンテナに追加されます。

コンテナ輸入自動設定クラス(xxxAutoConfiguration)の多くを与える;このシナリオでは、コンテナに必要なすべてのコンポーネントをインポートし、これらのコンポーネントを構成することで
ここに画像を挿入説明
自動設定クラスを使用すると、必要性を排除し、手動で、我々は機能性成分を注入設定を記述することそして他の仕事、
ツール、既存のSpringフレームワークによって:SpringFactoriesLoaderサポート、SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class、クラスローダを);春ブーツが起動時にMETA-INFクラスパスから取得/ spring.factories EnableAutoConfigurationを容器に自動設定クラスとして、これらの値を値を指定し、クラスが自動的に私たちのために仕事に自動設定のために設定が有効になります。私たちは私たちを助けるために、自分の設定、自動コンフィギュレーションクラスの前に必要なもの。

ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
J2EE全体的な統合ソリューションと自動構成は春・ブート自動構成されています

ここに画像を挿入説明

公開された40元の記事 ウォンの賞賛9 ビュー20000 +

おすすめ

転載: blog.csdn.net/aawmx123/article/details/102536254