SSMの3つのフレームワークのソースコード解析のSpringBoot統合SpringBootソースコード解析

春のブートソースコード解析

.Springブートプロジェクトは、入口フロー分析を開始しました

  @SpringBootApplicationは、メインコンフィギュレーションクラスを示す、スレッド春ブートプロジェクト(@Configuration + @EnableAutoConfiguration + @ComponentScan)ノートを開始するメインの入り口があり、プログラムが自動的に必要な構成を識別して作ってみましょう

  プロジェクトは、最初の自動設定を開始すると次のように、ソースコードは、次のとおりです。 

---パッケージorg.springframework.boot.autoconfigureにインタフェースクラスを持っています   AutoConfigurationImportSelector

パブリック クラスAutoConfigurationImportSelectorの
         実装... { 
         ... 試し{ 
            AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader 
                    .loadMetadata(この.beanClassLoader)。
            AnnotationAttributes属性 = のgetAttributes(annotationMetadata)。
            一覧 <文字列>構成= getCandidateConfigurations(annotationMetadata、
                    属性); 
            ... 
        } 
        キャッチ(のIOException EX){
             スロー 新しいIllegalStateExceptionを(EX); 
        } 
    } 
}

  デフォルトのリソースSpringFactoriesLoaderの走査経路(以下ソース)することで、返す  リスト<文字列>の構成の経験に続いて必要な設定(23)を、残して、治療法の一連の後、(私のプロジェクト、97個の構成アイテム) Springフレームワーク、段階的な展開プロジェクトの重要なクラスメソッド(リフレッシュ)AbstractApplicationContextクラスメソッド。 

パブリック 抽象 クラスSpringFactoriesLoader { 
  ...   
    パブリック 静的 最終的な文字列FACTORIES_RESOURCE_LOCATION = " META-INF / spring.factories " 
  ...     
}

PS:SpringBootは、ロードプロセスのSpringBootへのフォローアップのブレークポイント、デバッグ開始を追加するコードレッド(候補の構成セットを作成する)には、この種の独自のプロジェクトで見つけるかもしれません。

 どのようにスタートアップコンフィギュレーションクラスをロードするために、2つの.Springブート例をフレームワーク:?MyBatisのを

  1.注釈走査することにより、開始時刻springboot @EnableConfigurationProperties(MybatisProperties.class)は:MyBatisのフレーム構成のクラスロードMybatisAutoConfigurationを

  2.コンフィギュレーションクラスMyBatisのフレームワークをチェック

パブリック クラスMybatisAutoConfiguration { 

  民間 最終MybatisPropertiesのプロパティ ; 
   ... 
     
  @Bean 
  @ConditionalOnMissingBean 
  公共 SqlSessionFactory sqlSessionFactory(データソースのdataSource)スロー例外{ 
    SqlSessionFactoryBean工場 = 新しいSqlSessionFactoryBean(); 
   ... 
  }

  3. MyBatisのの設定の詳細を確認

@ ConfigurationProperties(プレフィックス= MybatisProperties.MYBATIS_PREFIX)
 パブリック クラスMybatisProperties { 

  パブリック 静的 最終的な文字列MYBATIS_PREFIX = "MyBatisの" 
  ...     
}

  MyBatisのスプリング・ブートautoconfigure.jarパッケージ4.参照META-INFのリソースパス

III。MyBatisの-デモ自己開発のフレームワークと春ブーツの統合

  1.分析:コアクラスを必要な研究の枠組みからjarパッケージ、?

類推MyBatisの、必要なコアクラス、そこSqlSessionFactory、

  MybatisAutoConfiguration、

  SqlSessionFactory方法...()、

  MybatisProperties。

  2.インストールMavenの公開、以下のようにプロジェクトが構成され、ラベルされたjarファイルのパッケージをプロジェクトのデモ-MyBatisのを作成し、シミュレーションフレームワーク

  プロジェクト送信元アドレスは、この記事の尾を参照してください、私を修正してください!

   3.新しいSpringBootプロジェクト、SpringMvcは、そのブート・ウェブ・スターターに頼る追加

    ①のjarパッケージを敷設するデモMyBatisの私達の自己開発フレームワークの導入を

    次のように依存します:

<dependency>
    <groupId>com.demo</groupId>
    <artifactId>demo-mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

    ②  编辑Controller    

@RestController
public class DemoController {
    @Autowired
    SqlSessionFactory sessionFactory;
    
    @RequestMapping("/demo-mybatis")
    public String demo() {
        return sessionFactory.getSqlSession();
    }
}

    ③ 修改yml文件自定义 框架的配置属性

com:
  demo:
    mybatis:
      hello: hi!
      world: new world!

    ④ 启动项目, 会看到控制台输出了自研框架内的"假"信息:

    ⑤ 访问测试地址: http://localhost:8080/demo-mybatis

 

    访问成功!!!

  就这样, 我们剖析了SpringBoot的加载原理, 并仿造Mybatis框架, 自研了一个demo框架, 并整合到SpringBoot项目中!!!

源码地址, 可以参考我的GitHub: https://github.com/93LifeAfterLife/Demo-Mybatis

欢迎交流指正~

おすすめ

転載: www.cnblogs.com/sansheng93/p/11354033.html