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

欢迎交流指正~

原文地址:https://www.cnblogs.com/sansheng93/p/11354033.html

时间: 2024-07-30 21:27:36

SpringBoot整合SSM三大框架源码剖析之SpringBoot源码剖析的相关文章

SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)

使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些.以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下.这次,先说说三大框架整合过程.个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助.不过,如果用都不会,谈思想就

SSM三大框架整合详细教程Spring+SpringMVC+MyBatis+maven

[源码获取地址] 使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些.以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下.这次,先说说三大框架整合过程.个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助.不过,如果

SpringMVC详解(四)------SSM三大框架整合之登录功能实现

为了后面讲解的需要,我们取数据都会从数据库中获取,所以这里先讲讲三大框架(Spring.SpringMVC.MyBatis)的整合.前面讲解 MyBatis 时,写了一篇 MyBatis 和 Spring 的整合,有兴趣的可以先看看:http://www.cnblogs.com/ysocean/p/7368499.html ,那么接下来我们直接进入正题! 本篇博客源码下载链接:http://pan.baidu.com/s/1skAfNRZ 密码:n3fn 1.整合思路 ①.表现层,也就是 Con

四、SSM三大框架整合之登录功能实现

1.整合思路 ①.表现层,也就是 Controller,由 SpringMVC 来控制,而SpringMVC 是Spring 的一个模块,故不需要整合. ②.业务层,也就是 service,通常由 Spring 来管理 service 接口,我们会使用 xml 配置的方式来将 service 接口配置到 spring 配置文件中.而且事务控制一般也是在 service 层进行配置. ③.持久层,也就是 dao 层,而且包括实体类,由 MyBatis 来管理,通过 spring 来管理 mappe

SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)【转】

使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些.以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下.这次,先说说三大框架整合过程.个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助.不过,如果用都不会,谈思想就

SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)(转)

使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录 SSM 整合的过程, 这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些.以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下. 这次 , 先说说 三大框架整合过程 .个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮

SSM三大框架整合详细教程

使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些.以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下.这次,先说说三大框架整合过程.个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助.不过,如果用都不会,谈思想就

SpringBoot整合SSM(代码实现Demo)

SpringBoot整合SSM 如图所示: 一.数据准备: 数据库文件:数据库名:saas-export,表名:ss_company 创建表语句: DROP TABLE IF EXISTS ss_company;CREATE TABLE ss_company ( id varchar(40) NOT NULL COMMENT 'ID', name varchar(255) DEFAULT NULL COMMENT '公司名称', expiration_date datetime DEFAULT

[项目构建]babasport SSM 三大框架整合 [练手项目]

上一篇已经讲了整个各个子模块的创建过程以及它们之间的依存关系, 那么这一篇就来正式的整合三大框架(SSM)了. 1, 准备环境1.1 为每个War包工程创建一个Server 那么 添加了Server后需要对每一个Server进行配置:以console为例子:设置timeout的时间为300 去掉项目名 剩下的几个Server 需要改端口号: 2, 导入Jar包在父工程的pom文件中导入项目开发所需要的jar包:pom.xml: 1 <project xmlns="http://maven.