春のブートソースコード解析
.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