导图社区 SpringBoot框架
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。本思维导图分析SpringBoot框架知识,从入门到深入源码解读!
编辑于2019-10-27 16:04:47极客时间-后端工程师的高阶面经邓明50讲思维导图笔记,服务端上线,向注册中心注册服务,客户端第一次调用,缓存注册中心的服务列表。
关于Redis核心技术与实战的思维导图,包含了Redis入门与应用、Redis高级特性和应用(发布 订阅、Stream)等内容。
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。本思维导图分析SpringBoot框架知识,从入门到深入源码解读!
社区模板帮助中心,点此进入>>
极客时间-后端工程师的高阶面经邓明50讲思维导图笔记,服务端上线,向注册中心注册服务,客户端第一次调用,缓存注册中心的服务列表。
关于Redis核心技术与实战的思维导图,包含了Redis入门与应用、Redis高级特性和应用(发布 订阅、Stream)等内容。
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。本思维导图分析SpringBoot框架知识,从入门到深入源码解读!
SpringBoot
介绍
优点
约定优于配置的思想,可以让开发人员不必在配置与逻辑 业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短 了项目周期。
特点
1.更快的入门体验 2.开箱即用,没有代码生成,也无需XML配置3.提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等 4.SpringBoot提供了快速使用Spring的方式
入门
使用idea工具创建一个maven工程,该工程为普通的java工程即可
添加SpringBoot的起步依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version></parent>
SpringBoot要集成SpringMVC进行Controller的开发,所以项目要导入web的启动依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency></dependencies>
编写SpringBoot引导类
package com.itheima;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class); }}
编写Controller
package com.itheima.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class QuickStartController { @RequestMapping("/quick") @ResponseBody public String quick(){ return "springboot 访问成功!"; } }
测试
入门解析
代码解析
- @SpringBootApplication:标注SpringBoot的启动类,该注解具备多种功能(后面详细剖析)
- SpringApplication.run(MySpringBootApplication.class) 代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象
热部署
<!--热部署配置--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId></dependency>
失败原因
idea快速创建SpringBoot
SpringBoot原理分析
起步依赖原理分析
分析spring-boot-starter-parent
从上面的spring-boot-starter-dependencies的pom.xml中我们可以发现,一部分坐标的版本、依赖管理、插件管理已经定义好,所以我们的SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了。所以起步依赖的作用就是进行依赖的传递。
分析spring-boot-starter-web
从上面的spring-boot-starter-web的pom.xml中我们可以发现,spring-boot-starter-web就是将web开发要使用的spring-web、spring-webmvc等坐标进行了“打包”,这样我们的工程只要引入spring-boot-starter-web起步依赖的坐标就可以进行web开发了,同样体现了依赖传递的作用。
自动配置原理解析
注解@SpringBootApplication
@SpringBootConfiguration:等同与@Configuration,既标注该类是Spring的一个配置类@EnableAutoConfiguration:SpringBoot自动配置功能开启按住Ctrl点击查看注解@EnableAutoConfiguration
其中,@Import(AutoConfigurationImportSelector.class) 导入了AutoConfigurationImportSelector类按住Ctrl点击查看AutoConfigurationImportSelector源码
其中,SpringFactoriesLoader.loadFactoryNames 方法的作用就是从META-INF/spring.factories文件中读取指定类对应的类名称列表
spring.factories 文件中有关自动配置的配置信息如下:
上面配置文件存在大量的以Configuration为结尾的类名称,这些类就是存有自动配置信息的类,而SpringApplication在获取这些类名后再加载我们以ServletWebServerFactoryAutoConfiguration为例来分析源码:
其中,@EnableConfigurationProperties(ServerProperties.class) 代表加载ServerProperties服务器配置属性类进入ServerProperties.class源码如下:
其中,prefix = "server" 表示SpringBoot配置文件中的前缀,SpringBoot会将配置文件中以server开始的属性映射到该类的字段中。映射关系如下:
配置文件
application.yml
配置普通数据
配置对象数据
配置Map数据
同上
配置数组(List、Set)数据
SpringBoot配置信息的查询
配置文件与配置类的属性映射方式
使用注解@Value映射
使用注解@ConfigurationProperties映射
SpringBoot与整合其他技术
SpringBoot整合Mybatis
添加依赖
<!--mybatis起步依赖--><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version></dependency>
添加数据库驱动坐标
<!-- MySQL连接驱动 --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency>
添加数据库连接信息
在application.properties中添加数据量的连接信息
#DB Configuration:spring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8spring.datasource.username=rootspring.datasource.password=root
创建user表
-- ------------------------------ Table structure for `user`-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `name` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');
创建实体Bean
public class User { // 主键 private Long id; // 用户名 private String username; // 密码 private String password; // 姓名 private String name; //此处省略getter和setter方法 .. .. }
编写Mapper
@Mapperpublic interface UserMapper { public List<User> queryUserList();}
注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中
配置Mapper映射文件
在src\main\resources\mapper路径下加入UserMapper.xml配置文件"
<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.itheima.mapper.UserMapper"> <select id="queryUserList" resultType="user"> select * from user </select></mapper>
在application.properties中添加mybatis的信息
#spring集成Mybatis环境#pojo别名扫描包mybatis.type-aliases-package=com.itheima.domain#加载Mybatis映射文件mybatis.mapper-locations=classpath:mapper/*Mapper.xml
编写测试Controller
@Controllerpublic class MapperController { @Autowired private UserMapper userMapper; @RequestMapping("/queryUser") @ResponseBody public List<User> queryUser(){ List<User> users = userMapper.queryUserList(); return users; }}
测试
SpringBoot整合Junit
SpringBoot整合Spring Data JPA
SpringBoot整合Redis