SpringBoot(3)SpringBoot自動設定

    我々は、すべてのSpringBootは、これらの構成を統合する方法であると、自動的にそれの開始時に設定されているので、私たちは、コンポーネントと構成の数を統合するSpringBootヘルプを知っています。あなたは背中と@SpringBootApplicationを見、この注釈を移動する必要がない場合も、このコメントは、3つの音の@設定、@ EnableAutoConfiguration、@ ComponentScan組み合わせである前に、@EnableAutoConfiguration特別重点は、このコメントには存在しない必要としていると言えばそのうちこれは間違ったノートが自動設定を完了SpringBootです。@EnableAutoConfiguration ----- @インポート(EnableAutoConfigurationImportSelector.class)----- AutoConfigurationImportSelector我々は自動的に構成しSpringBootがセレクタの中に導入することができ、このため。次は、完全なSpringBootに自動的に設定されているかを見て、ソースで観測します。

1    パブリック文字列[] selectImports(AnnotationMetadata annotationMetadata){     // インポート選択
2          IF(!でIsEnabled(annotationMetadataを)){ //は、元のデータが空の空の戻り空のインポート関連の操作を空でないかどうかを決定する
3。           リターンNO_IMPORTS;
 4          }
 5。         試し{
 6。              AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader 
 7。                       .loadMetadata(この.beanClassLoader)
 。8              AnnotationAttributes属性=のgetAttributes(annotationMetadata);   // ロード属性を取得
9             一覧<文字列>構成= getCandidateConfigurations(annotationMetadata、// 获取配置信息
10の                     属性)。
11の              構成= removeDuplicates(構成)。 
12の              構成= ソート(構成、autoConfigurationMetadata)。
13              セットの<string>除外= getExclusions(annotationMetadata、属性)。
14             checkExcludedClasses(構成、除外)。
15              configurations.removeAll(除外)。
16の              構成=フィルタ(構成、autoConfigurationMetadata)。  //完全ソートおよびフィルタリングするように構成されているライン11及び16から除去するための集積いいえ
17。              fireAutoConfigurationImportEvents(設定、除外);        // コンポーネントインポートフィルタ後
18は             リターン configurations.toArray(新しい新しい文字列[configurations.size()])。
 19          }
 20          キャッチ(IOExceptionをEX){
 21で             スロー 新しい新しいIllegalStateExceptionが(EX);
 22である         }
 23れます      }

    上記のコードは、実際には、動作手順は、私がコメントの簡単な説明を持って、自動構成するための主要な方法であります

     まず、元のデータが空であると判定された場合に、特定の動作

     オリジナルデータと取得プロパティを負荷2

     3.設定情報を取得します    (実際には、最も重要なことは、構成情報ので、第三のポイントを取得し、それは私たちが最も心配していることSpringBootの核心部分であるであるロードする方法です)

     4. [削除は完全にコンフィギュレーションと順序フィルタを統合されていません    (一部の設定SpringBootが完全に私たちに構成されていないので、私たち自身がSpringBootはとても個人的にすべてのコンポーネントがそう一体化されている場合だと思いました手動でここで設定する必要がありますそれはいくつかの圧力が発生しますプロジェクト自体に始めた、すべての後に、いくつかのコンポーネントは)いくつかのプロジェクトで使用する必要はありません。

     処理後インポートコンポーネント構成

    ここでは、で重視する必要が getCandidateConfigurationsこの方法をしてSpringBootは、コンポーネントを取得する方法を参照してください。

。1  保護リストの<string> getCandidateConfigurations(AnnotationMetadataメタデータ、
 2つの             AnnotationAttributes属性){
 3。          一覧の<string>設定= SpringFactoriesLoader.loadFactoryNames(    // スプリング工場ローディング設定情報
4。                 getSpringFactoriesLoaderFactoryClass()、getBeanClassLoader());
 5          Assert.notEmpty (構成は、
 6                  「あなたがない場合は自動設定クラスは、META-INFに見つからない/ spring.factories。」
 7。                          +「を使用してAカスタムパッケージは、確認してくださいファイルが正しいこと、です。」);   // 設定が配置されている場合は、空返すようにMETA-INF内の構成情報を見つけられませんでした情報や説明が/このディレクトリをspring.factories
8つの         リターン構成。
9 }
1つの パブリック 静的 最終列FACTORIES_RESOURCE_LOCATION = "META-INF / spring.factories" 2  
3  
4  公共の 静的リストの<string> loadFactoryNames(<?>クラスfactoryClass、クラスローダクラスローダ){
 5          列factoryClassName = factoryClass.getName()。
6          試し{
 7              列挙<URL> URLを=(クラスローダ=!ヌル classLoader.getResources(FACTORIES_RESOURCE_LOCATION):?   // 获取资源路径
8                      ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));
9             一覧<文字列>結果= 新しいのArrayList <文字列> ();
10              一方(urls.hasMoreElements()){                 // 如果存在将资源存入结果集中
11                  URL URL = urls.nextElement()。
12の                  プロパティプロパティ= PropertiesLoaderUtils.loadProperties(新しいUrlResource(URL));
13                  列factoryClassNames = properties.getProperty(factoryClassName)。
14                  result.addAll(は、Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)))。
15              }
 16              リターン結果。
17          }
 18          キャッチ(IOExceptionを元){
 19               新しいはIllegalArgumentException( "読み込むことができません[" + factoryClass.getName()+
 20                      "]の位置から工場[" + FACTORIES_RESOURCE_LOCATION + "]" 、EX)。
21          }
 22      }

 

 

 

 私はここであまりにも多くの説明を必要としないことを信じて、一言で言えばSpringBootは、構成情報を取得するために、「META-INF / spring.factories」ディレクトリに移動し、自動設定を行いますし、今は背中を見て当初SpringBootの用語法は、自動設定のために、我々は、デバッグを見てみましょう。

 

 

 ここでは、彼が前に除去し、組み立て濾過後、別のを見て、次の無ろ過96へのディレクトリに取得するためにSpringBootを見ることができます。

 

 

 

     濾過後、他のコンポーネントを手動で自分自身を設定する必要がある場合は、当社の完全に統合され、自動的に構成するSpringBoot 20のコンポーネントを言うことである20は、あります。(部品の固定数は、バージョンは、ここで私は、バージョンの1.5.9を使用して変更される可能性がありますサポート)

    このモードに加えて、自動的に私たちのためにそれを設定SpringBootどのコンポーネントを決定する方法は他にもあるのですか?あなたが本当にそれで、このトラブルを見れば、それは自動的にデバッグを使用して設定されたものを確認するために開始したときに、すべての後、我々はすべての時間を書くことができない、SpringBootは、私たちは自動化することができるか見てみましょうコンソールにデバッグ起動モードを提供しますどのような構成の自動設定を完了しなかった、地図上あまり話をしませんでした

 

 

 

 

    ポジティブマッチ:すでに自動的に構成された負の試合:いいえ自動設定、そのSpringBootは、実際には、すべてのSpringBootのコア構成の後に、また、いくつかの場所で誤解に間違った恐怖、自動的に長い時間のためか、他の書き込みにこれを設定する、自動設定を完了する方法の他の人がお互いに相互の進捗状況から学ぶ、それを修正することを望んで間違った場所を参照して、この記事を参照したいと思い、私はハードの作業者ではないが、私は現在の低迷状態を変更できるようにしたい今も覚えているまで私は大学の先生の言葉、午前限り、決して遅すぎる限りの努力が成功すると、起動にチキンスープの、があるかもしれないコンポーネントを、それでも決して遅すぎるの希望限り、開始します。

 

 

    私は退廃遊び人になって長い間、でも初心を忘れて、この職業を選んだ、常に不公平文句の好きだった、私は自分自身の努力の翌日に取り戻すことを願って、誰もフラットな光を望んでいません生涯にわたる平凡、他人の価値があるために、それ自体価値があるではないが、また、人のそれぞれが、我々は自分自身の想像力になって、自分自身の価値があることができ、この業界のパートナーを主張したいです。

おすすめ

転載: www.cnblogs.com/wjt096/p/12585939.html