学习SpringBoot整合SSM三大框架源码之SpringBoot
Spring Boot源码剖析
一.Spring Boot 项目的启动入口流程分析
Spring Boot项目的启动入口main线程上有一个@SpringBootApplication( @Configuration + @EnableAutoConfiguration + @ComponentScan )注解, 表明是主配置类, 让程序自动识别并进行必要的配置
项目启动后, 首先进行自动配置, 源码如下:
---在org.springframework.boot.autoconfigure 包下有一个接口实现类: AutoConfigurationImportSelector
public class AutoConfigurationImportSelector
implements ... {
...try {
AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
.loadMetadata(this.beanClassLoader);
AnnotationAttributes attributes = getAttributes(annotationMetadata);
List<String> configurations = getCandidateConfigurations(annotationMetadata,
attributes);
...
}
catch (IOException ex) {
throw new IllegalStateException(ex);
}
}
}
通过SpringFactoriesLoader扫描默认的资源路径( 源码如下 ), 返回 List<String> configurations (我的项目中, 97个配置项), 在经过一系列方法处理后, 留下必要的配置( 23个 ), 随后经历一个重要的 Spring框架的类的方法, 逐步部署项目, 即 AbstractApplicationContext 类的 refresh() 方法.
public abstract class SpringFactoriesLoader {
...
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
2. 查看mybatis框架的配置类
public class MybatisAutoConfiguration { private final MybatisProperties properties;
... @Bean
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
...
}
3. 查看mybatis的详细配置信息
@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)
public class MybatisProperties { public static final String MYBATIS_PREFIX = "mybatis";
...
}
4. 查看mybatis-spring-boot-autoconfigure.jar 包下的 META-INF 资源路径
三.自研mybatis-demo框架与Spring Boot整合
1. 分析: 自研框架的jar包, 需要哪些核心类?
类比Mybatis, 需要的核心类, 有 SqlSessionFactory,
MybatisAutoConfiguration,
SqlSessionFactory method..(),
MybatisProperties.
2.创建项目 demo-mybatis, 项目结构如下, 进行maven install 打成 jar包, 模拟框架的发布
项目源码地址见本篇博文尾部, 欢迎指正!
3. 新建SpringBoot项目, 添加SpringMvc依赖, 即 boot-web-starter
① 引入我们打好的demo-mybatis 自研框架的 jar 包
依赖如下:
<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
欢迎交流指正~
学习SpringBoot整合SSM三大框架源码之SpringBoot的更多相关文章
- 整合ssm三大框架使用注解开发查询用户信息
整合ssm三大框架使用注解开发查询用户信息 一.基础知识准备之spring mvc工作原理 二.分析 第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求Hand ...
- java 快速开发平台 有代码生成器 springmvc SSM后台框架源码
. 权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限 角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限. 按钮权限: 给角色分配按钮权限.2 ...
- java代码生成器 快速开发平台 二次开发 外包项目利器 springmvc SSM后台框架源码
. 权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限 角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限. 按钮权限: 给角色分配按钮权限.2 ...
- java 快速开发框架平台 二次开发 代码生成器 springmvc SSM后台框架源码
官网 http://www.fhadmin.org/D 集成安全权限框架shiro Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安全,更可靠E ...
- SSM 三大框架系列:Spring 5 + Spring MVC 5 + MyBatis 3.5 整合(附源码)
之前整理了一下新版本的 SSM 三大框架,这篇文章是关于它的整合过程和项目源码,版本号分别为:Spring 5.2.2.RELEASE.SpringMVC 5.2.2.RELEASE.MyBatis ...
- SpringMVC详解(四)------SSM三大框架整合之登录功能实现
为了后面讲解的需要,我们取数据都会从数据库中获取,所以这里先讲讲三大框架(Spring.SpringMVC.MyBatis)的整合.前面讲解 MyBatis 时,写了一篇 MyBatis 和 Spri ...
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)【转】
使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)(转)
使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...
随机推荐
- vscode 中 vue项目使用eslint插件 检查代码
前言 本文章项目由vue-cli3创建 vscode版本1.36.1 eslint1.9.0 在网上找了一大堆文章,不知是什么原因,没有一篇可以直接使用的 折腾了许久,直接按eslint插件的说明,竟 ...
- The websites related Laravel 相关网站(内容将不断更新)
https://laraveldaily.com/ 文章内容质量很高
- 五十一.Openstack概述 部署安装环境 、 部署Openstack OpenStack操作基础
虚拟化技术的底层构成: 内核的虚拟化模块(KVM):从内核集去提供虚拟化及CPU指令集的支持,要求CPU支持,(CPU有VMX指令集) 硬件仿真层(QEMU):虚拟一些周边设备,鼠标.键盘.网卡. ...
- ckeditor粘贴word文档图片的思路
由于工作需要必须将word文档内容粘贴到编辑器中使用 但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直 ...
- linux系统编程--线程同步
同步概念 所谓同步,即同时起步,协调一致.不同的对象,对“同步”的理解方式略有不同. 如,设备同步,是指在两个设备之间规定一个共同的时间参考: 数据库同步,是指让两个或多个数据库内容保持一致,或者按需 ...
- python实现随机生成头像
今天遇到如何给用户分配随机头像的问题,想着要在本地放很多图片,有点无聊,就找了一些生成头像的工具.发现gravatar生成图像还不错,挺好玩的. 1.下面上代码 # -*- coding: utf-8 ...
- VMWare Fusion 8 序列号
FY75A-06W1M-H85PZ-0XP7T-MZ8E8 ZY7TK-A3D4N-08EUZ-TQN5E-XG2TF FG1MA-25Y1J-H857P-6MZZE-YZAZ6
- 1.1 OC class new summary
1.http://www.cnblogs.com/mjios/archive/2013/04/06/3002814.html 2.How to create a oc class? 3. 3.1 In ...
- idea将项目打成jar包
在用jmeter做压测时,需要将项目打成jar包放至在如下目录 /Users/admin/Documents/software/apache-jmeter-5.1.1/apache-jmeter-5. ...
- java 生成随机数 自定义
public static void main(String[] args) { int max=10000; int min=1000; Random random = new Random(); ...