Spring Boot回顾
一、概述
1、Spring的优缺点
- 优点
- 无需开发ELB,通过IOC和AOP,就可以使用POJO(简单的Java对象)实现ELB的功能
- 缺点:
- 依赖管理导入Maven耗时耗力
- 注解繁琐
2、SpringBoot的特点
- 入门简单,无需配置
- 提供非功能特性(嵌入式服务器)
二、快速入门
1、环境搭建
- 继承起步依赖
- 添加web的起步依赖
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.0.1.RELEASE</version>
- </parent>
- <groupId>com.itheima</groupId>
- <artifactId>SpringBoot_QuickStart</artifactId>
- <version>1.0-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- </dependencies>
- 编写引导类
- package com.itheima;
- @SpringBootApplication
- public 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;
- @Controller
- public class QuickController {
- @RequestMapping("/quick")
- @ResponseBody
- public String quick(){
- return "hello Spring Boot";
- }
- }
2、细节
- @SpringBootApplication是引导类,run方法中运行引导类名,通常情况下引导类就是main方法所在的类
- 添加坐标
热部署:修改Controller源码时,不再需要重启项目即可自动加载
- <!--热部署配置-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-devtools</artifactId>
- </dependency>
- 修改设置,Build,Compiler,勾选Build project automatically
- Ctrl+Shift+Alt+/,选择Registry,勾选app.running
3、IDEA创建SpringBoot工程
- Spring Initializer
- 添加Module时选中Web
- 编写Controller
- package com.itheima.controller;
- @RestController
- //将controller和responsebody放在一起,不再需要写responsebody
- public class QuickController {
- @RequestMapping("/quick2")
- public String quick(){
- return "SpringBoot!!!";
- }
- }
三、原理分析
1、起步依赖-parent
通过二次继承实现版本控制
2、起步依赖--web
内部有web相关的环境,如Spring/Spring MVC和Tomcat
四、配置文件
1、默认配置与覆盖
SpringBoot会从Resources/META-INF目录下加载application.properties或application.yml(application.yaml)文件,用来替换默认配置
加载顺序:
2、yml文件的介绍
- YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式
- YML文件的扩展名可以使用.yml或者.yaml
- 普通数据和对象数据的配置
- # 普通数据的配置
- name: zhangsan
- # 对象的配置
- # 通过缩进
- #person:
- # name: zhangsan
- # age: 18
- # addr: beijing
- server:
- port: 8083
- # 行内对象配置(用的少)
- person: {name: zhangsan,age: 18,addr: beijing}
- 集合的配置
- # 配置数组、集合(普通字符串)
- city:
- - beijing
- - tianjin
- - chongqing
- - shanghai
- - jinan
- # 行内方式
- #city: [beijing,jinan,hefei,nanjing]
- # 数组、集合中存放对象数据
- student:
- - name: tom
- age: 18
- addr: hefei
- - name: xiaoming
- age: 17
- addr: tianjin
- # 行内方式
- # student: [{name: tom,age: 18,addr: nanjing},{name: xiaoming,age: 18,addr: tianjin}]
- # map配置
- map:
- key1: value1
- key2: value2
3、数据映射
- @Value注解:将配置文件的值映射到Bean属性上
- @Controller
- public class Quick2Controller {
- @Value("${name}")
- private String name;
- @Value("${person.addr}")
- private String addr;
- @RequestMapping("/quick2")
- @ResponseBody
- public String quick2(){
- //获得配置文件的 信息
- return "name:"+name+" addr:"+addr;
- }
- }
- @ConfigurationProperties注解,放到类前,需要写getter和setter方法
- @Controller
- @ConfigurationProperties(prefix = "person")
- public class Quick3Controller {
- //需要提供getset方法
- private String name;
- private String addr;
- @RequestMapping("/quick3")
- @ResponseBody
- public String quick2(){
- //获得配置文件的 信息
- return "name:"+name+" addr:"+addr;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- configuration-processor执行器,在yml文件中更快得到Bean的属性名
- <!--@ConfigurationProperties的执行器的配置-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-configuration-processor</artifactId>
- <optional>true</optional>
- </dependency>
Controller
- @Controller
- @ConfigurationProperties(prefix = "person")
- public class Quick3Controller {
- //需要提供getset方法
- private String name;
- private String addr;
- private Integer age;
- @RequestMapping("/quick3")
- @ResponseBody
- public String quick2(){
- //获得配置文件的 信息
- return "name:"+name+" addr:"+addr+" age:"+age;
- }
- public String getName() {
- return name;
- }
配置好后,只需要在yml中使用Alt+/快捷键,即可得到Bean的属性
五、与其他框架的集成
1、集成Mybatis
- # 配置mybatis的信息
- # 别名配置
- #spring集成Mybatis环境
- # pojo别名扫描包
- mybatis.type-aliases-package=com.itheima.domain
- #加载Mybatis映射文件
- mybatis.mapper-locations=classpath:mapper/*Mapper.xml
- @Controller
- public class MybatisController {
- @Autowired
- private UserMapper userMapper;
- @RequestMapping("/query")
- @ResponseBody
- public List<User> queryUserList(){
- List<com.itheima.domain.User> users = userMapper.queryUserList();
- return users;
- }
- }
2、集成Junit
- <!--SpringBoot集成Junit测试的起步依赖,IDEA中已经默认导入了-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- @RunWith(SpringRunner.class)
- @SpringBootTest(classes = SpringbootMybatisApplication.class)
- public class MybatisTest {
- @Autowired
- private UserMapper userMapper;
- @Test
- public void test(){
- List<User> users = userMapper.queryUserList();
- System.out.println(users);
- }
- }
3、集成SpringDataJPA
- <!--导入起步依赖-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-jpa</artifactId>
- </dependency>
- <!--添加数据库驱动依赖-->
- <!-- MySQL连接驱动 -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- <!--jdk9需要导入如下坐标-->
- <dependency>
- <groupId>javax.xml.bind</groupId>
- <artifactId>jaxb-api</artifactId>
- <version>2.3.0</version>
- </dependency>
- @RunWith(SpringRunner.class)
- @SpringBootTest(classes = SpringbootJpaApplicationTests.class)
- public class JpaTest {
- @Autowired
- private UserRepository userRepository;
- @Test
- public void test(){
- List<User> all = userRepository.findAll();
- System.out.println(all);
- }
- }
4、集成Redis
Spring Boot回顾的更多相关文章
- 回顾maven项目的spring boot相关知识点
2021新年快乐! 在参加完研究生考试后,感觉像是放下了一个大负担,但并不能就此以为什么都结束了.反而,当我今天去看了一下之前老师带领我们班级做的一个maven项目,感觉像是第一次看到这个,十分陌生. ...
- 精益求精!Spring Boot 知识点全面回顾,带你重新细读源码!
约定优于配置 Build Anything with Spring Boot:Spring Boot is the starting point for building all Spring-bas ...
- 我的第一个spring boot程序(spring boot 学习笔记之二)
第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相 ...
- Https系列之二:https的SSL证书在服务器端的部署,基于tomcat,spring boot
Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...
- Spring Boot Starter 介绍
http://www.baeldung.com/spring-boot-starters 作者:baeldung 译者:http://oopsguy.com 1.概述 依赖管理是任何复杂项目的关键部分 ...
- Spring Boot 2.0(二):Spring Boot 2.0尝鲜-动态 Banner
Spring Boot 2.0 提供了很多新特性,其中就有一个小彩蛋:动态 Banner,今天我们就先拿这个来尝尝鲜. 配置依赖 使用 Spring Boot 2.0 首先需要将项目依赖包替换为刚刚发 ...
- Java 小记 — Spring Boot 注解
前言 本篇随笔将对 Spring Boot 中的常用注解做一个简单的整理归档,写作顺序将从启动类开始并逐步向内外扩展,目的即为了分享也为了方便自己日后的回顾与查阅. 1. Application 启动 ...
- Spring Boot应用的后台运行配置
酱油一篇,整理一下关于Spring Boot后台运行的一些配置方式.在介绍后台运行配置之前,我们先回顾一下Spring Boot应用的几种运行方式: 运行Spring Boot的应用主类 使用Mave ...
- 《深入实践Spring Boot》阅读笔记之三:核心技术源代码分析
刚关注的朋友,可以回顾前两篇文章: 基础应用开发 分布式应用开发 上篇文章总结了<深入实践Spring Boot>的第二部分,本篇文章总结第三部分,也是最后一部分.这部分主要讲解核心技术的 ...
- Spring Boot【快速入门】
Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point for building all Sp ...
随机推荐
- UEC++ 代理/委托
代理: 代理可以帮助我们解决一对一或是一对多的任务分配工作.主要可以帮助我们解决通知问题.我们可以通过代理完成调用某一个对象的一个函数,而不直接持有该对象的任何指针. 代理就是为你跑腿送信的,你可以不 ...
- Solutions:Elastic SIEM - 适用于家庭和企业的安全防护 ( 四)
- MongoDB 单实例节点主机的用户和权限一般操作步骤
步骤总结: 1.先正常启动 2.创建用户,创建数据库病授权用户 3.关闭程序,开启安全,然后启动 4.使用账号和密码连接 按未开启认证的方式(配置文件中没开启安全选项并且启动命令中不添加 --auth ...
- 基于python的RSA解密算法
摘要 网上有很多关于RSA的解密脚本,欧拉函数.欧几里得函数什么的,对于一个大专生的我来说,一窍不通,至此经历了三天三夜,我翻阅了RSA的加密原理,以及其底层算法,专研出了一套我自己的解密算法,尚有不 ...
- TCP和UDP有啥区别?
TCP全称: Transmission Control Protocol中文名: 传输控制协议解释: 是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.用途:TCP ...
- PAT (Basic Level) Practice 1024 科学计数法 分数 20
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...
- Spring_Boot项目集成Swagger填坑
事情是这样的: 最近疫情在家里闲的无聊 看了看Swagger-2 在练习的过程出现了错误 写个帖子 希望跟我有同样问题的朋友可以避雷. 下面进入正题: 编辑 我使用的swagger-2版本是2.9.4 ...
- 结构体struct知识
2022-10-12 08:52:03 // 结构体知识#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<m ...
- 20220729 - DP训练 #2
20220729 - DP训练 #2 时间记录 \(8:00-8:10\) 浏览题面 \(8:10-8:50\) T1 看题想到了建树,从每一个点遍历,若能遍历每一个点,则可以获胜 快速写完之后,发现 ...
- 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
参考文章: 深度剖析知识增强语义表示模型--ERNIE_财神Childe的博客-CSDN博客_ernie模型 ERNIE_ERNIE开源开发套件_飞桨 https://github.com/Pad ...