zoukankan      html  css  js  c++  java
  • spring boot starter原理解析

    这里以spring-boot-starter-1.3.2为例

    1. 结构:通过 xxx-starter 下的 META-INF/spring.provides文件指定,该文件主要指定依赖,文件内容如下
    #这里相当于依赖3个jar包
    provides: mybatis-spring-boot-autoconfigure,mybatis,mybatis-spring
    
    1. starter jar包只指定了依赖,本身为空白项目

    2. 核心在xxx-autoconfigure项目,该项目有两部分组成,

      • META-INF/xxx 目录下的资源文件;
      • autoconfigure目录下的自动配置
    3. META-INF目录有两个核心文件spring.factories和 xx-metadata.json , spring.factores使用spi机制,查找自动装配的实现类, metadata.json定义了默认属性配置,该文件可以可作为yml配置的参考文件

      ## spring.factories文件示例
      # Auto Configure
      org.springframework.boot.autoconfigure.EnableAutoConfiguration=
               org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
       
    
      ## matadata.json文件示例, 这里表示配置 mybatis.configuration.default-executor-type 与 mybatis.configuration.default-fetch-size
           {
           "sourceType": "org.apache.ibatis.session.Configuration",
           "name": "mybatis.configuration.default-executor-type",
           "type": "org.apache.ibatis.session.ExecutorType"
           },
           {
           "sourceType": "org.apache.ibatis.session.Configuration",
           "name": "mybatis.configuration.default-fetch-size",
           "type": "java.lang.Integer"
           }
    
    1. autoconfigure结构有xxxAutoConfiguration与xxxProperties,部分有VFS文件

      • xxxAutoConfiguration 主要是一个@Configurtaion配置类,并读取配置文件以及做一个初始化配置
      • xxxProperties 读取properties配置
      • VFS 从classpath加载bean ,比如配置:mybatis.type-aliases-package: com.test.demo.model, 通过VFS加载该model目录下的所有bean
    2. xxxAutoConfiguration 主要依赖@xxxxCondition实现 条件依赖

           @Configuration
           @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
           @ConditionalOnBean({DataSource.class})
           @EnableConfigurationProperties({MybatisProperties.class})
           @AutoConfigureAfter({DataSourceAutoConfiguration.class})
           public class MybatisAutoConfiguration {
           }
    
  • 相关阅读:
    (转)建表参数(pctfree,IniTrans,maxtrans)含义
    oracle 中事务提交
    如何创建线程安全的list
    [转] Redis 存储List对象
    【转】 Oracle用户密码过期和用户被锁解决方法
    【转】oracle中rownum和row_number()
    [转]如何防止博客园文章被窃取
    【转】解锁 时 ORA-00942 表或视图不存在 问题的解决
    java 接口可以多继承--【转】http://blog.csdn.net/tiantiandjava/article/details/46514783
    echarts 问题
  • 原文地址:https://www.cnblogs.com/liuyq/p/14939207.html
Copyright © 2011-2022 走看看