当前位置:   article > 正文

springboot python整合_学习SpringBoot整合SSM三大框架源码之SpringBoot

springboot集成python接口

Spring Boot源码剖析

一.Spring Boot 项目的启动入口流程分析

1746256-20190814194223098-242838376.png

Spring Boot项目的启动入口main线程上有一个@SpringBootApplication( @Configuration + @EnableAutoConfiguration + @ComponentScan )注解, 表明是主配置类, 让程序自动识别并进行必要的配置

项目启动后, 首先进行自动配置, 源码如下:

---在org.springframework.boot.autoconfigure 包下有一个接口实现类: AutoConfigurationImportSelector

copycode.gif

public classAutoConfigurationImportSelectorimplements... {

...try{

AutoConfigurationMetadata autoConfigurationMetadata=AutoConfigurationMetadataLoader

.loadMetadata(this.beanClassLoader);

AnnotationAttributes attributes=getAttributes(annotationMetadata);

List configurations =getCandidateConfigurations(annotationMetadata,

attributes);

...}catch(IOException ex) {throw newIllegalStateException(ex);

}

}

}

copycode.gif

1746256-20190814194943535-563753560.png

通过SpringFactoriesLoader扫描默认的资源路径( 源码如下 ), 返回 List configurations (我的项目中, 97个配置项), 在经过一系列方法处理后, 留下必要的配置( 23个 ), 随后经历一个重要的 Spring框架的类的方法, 逐步部署项目, 即 AbstractApplicationContext 类的 refresh()方法.

public abstract classSpringFactoriesLoader {

...public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";

...

}

ps: 不妨在自己的SpringBoot项目中找到这个类, 在红色代码( 创建候选配置集合 )处添加断点, debug启动来跟进SpringBoot的加载过程.

二.Spring Boot 启动时如何加载各种框架配置类? 举例: Mybatis

1. springboot启动时, 通过扫描到的注解 @EnableConfigurationProperties(MybatisProperties.class) 加载了mybatis框架配置类: MybatisAutoConfiguration

1746256-20190814200625384-2081056555.png

2. 查看mybatis框架的配置类

copycode.gif

public classMybatisAutoConfiguration {private finalMybatisProperties properties;

...

@Bean

@ConditionalOnMissingBeanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throwsException {

SqlSessionFactoryBean factory= newSqlSessionFactoryBean();

...

}

copycode.gif

3. 查看mybatis的详细配置信息

@ConfigurationProperties(prefix =MybatisProperties.MYBATIS_PREFIX)public classMybatisProperties {public static final String MYBATIS_PREFIX = "mybatis";

...

}

4. 查看mybatis-spring-boot-autoconfigure.jar 包下的 META-INF 资源路径

1746256-20190814201931082-327616870.png

三.自研mybatis-demo框架与Spring Boot整合

1. 分析: 自研框架的jar包, 需要哪些核心类?

类比Mybatis, 需要的核心类, 有 SqlSessionFactory,

MybatisAutoConfiguration,

SqlSessionFactory method..(),

MybatisProperties.

2.创建项目 demo-mybatis, 项目结构如下, 进行maven install 打成 jar包, 模拟框架的发布

1746256-20190814224255060-1745112120.png

项目源码地址见本篇博文尾部, 欢迎指正!

3. 新建SpringBoot项目, 添加SpringMvc依赖, 即 boot-web-starter

① 引入我们打好的demo-mybatis 自研框架的 jar 包

依赖如下:

com.demo

demo-mybatis

0.0.1-SNAPSHOT

② 编辑Controller

copycode.gif

@RestControllerpublic classDemoController {

@Autowired

SqlSessionFactory sessionFactory;

@RequestMapping("/demo-mybatis")publicString demo() {returnsessionFactory.getSqlSession();

}

}

copycode.gif

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

com:

demo:

mybatis:

hello: hi!

world: new world!

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

1746256-20190814225702875-602964140.png

1746256-20190814225817672-1621717736.png

访问成功!!!

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

欢迎交流指正~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/201123
推荐阅读
相关标签
  

闽ICP备14008679号