C语言 数据结构 个人收款码 哨兵模式 date inheritance bluetooth yii2 vue滑动事件 广告投放系统源码 jquery循环遍历 bentley软件介绍 mysql增删改查语句 安卓程序源代码 lora开发 less的比较级 mysql新增用户和权限 oracle可视化工具 mysql建表主键自增长 数据库教程 python环境设置 python创建对象 python条件判断 python代码 javaobject java教学 java写入文件 java初级 java环境包 java接口的实例 java八大基本数据类型 java接口调用 tabletpc 计算机操作系统第四版 id解锁大师 ps校正倾斜照片 oxm 刺激战场脚本 野德天赋 7个人
当前位置: 首页 > 学习教程  > 编程语言

SpringBoot 学习总结

2020/8/11 20:33:28 文章标签:

SpringBoot的优缺点

优点:
1. 创建独立的spring应用程序
2. 嵌入式的tomcat,jetty/undertow
3. 无需部署war文件
4. 尽可能的自动配置spring
5. 绝对没有代码生成,对xml没有要求配置

人话解读:springboot是基于spring框架搭建起来的应用,其次它会嵌入服务器,并且,不需要传统的war文件进行部署。
对于配置,springboot提供spring框架的最大化自动配置
但是,约定优于配置,这是一个重要思想。对于springboot而言,大部分情况下存在默认配置。夸张的说,你什么都不需要定义,依然可以使用spring框架。如果要自定义,只需要在配置文件中配置一写属性就可以。

缺点:
封装太多,底层难以理解

springboot的特点

1. 使用springboot可以提高基于spring的开发效率
2. 开箱即用(不理解),没有代码生成,也无需xml配置。同时可以修改默认值来满足特定需求
3. 提供了大型项目中非常常见的非功能性特性,如嵌入式服务器、外部配置等
4. springboot不是对spring功能上的增强,而是提供了一种快速使用spring方式

springboot的核心功能

	1. ==起步依赖==
	  				本质上是一个Maven项目对象模型(project object model,POM), 定义了对其他库的传递依赖,这些东西加在一起就支持了某项功能
	  				简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能
	 2. ==自动配置==
					springboot的自动配置是一个应用程序启动时的过程,考虑了众多因素,才决定spring配置应该用哪个,不该用哪个,该过程是spring自动完成的

springboot的快速入门

  1. 添加起步依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.maweiqi</groupId>
    <artifactId>springboot_demo01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--父工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
    </parent>

    <dependencies>
        <!--web起步包
         注意:虽然是web工程,但不需要打war包,直接打jar就行
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

细节
1. 添加web起步包,框架自动导入其他相关包,并且jar包之间不会冲突
2. 有tomcat,web就说明是互联网工程

  1. 编写springboot的引导类
//声明
@springbootapplication
class xxx
	main
	springapplication.run(xxx.class,args)
  1. 编写其他传统模块 和ssm一样

发现
省去了springmvc.xml的配置

快速入门的解析

  1. springboot代码解析
    @springbootapplication: 引导类/启动类。具有多种功能
  2. springapplication.run(xx.class) : 代表运行springboot的启动类,参数为springboot启动类的字节码对象

springboot工程热部署

  1. 目的: 修改代码后不启动就能生效
  2. 在pom文件中添加热部署
artifacid spring-boot-devtools -dependency

build
	plugins
		plugin
			artifacid spring-boot maven-plugin
  1. 开启idea 自动编译 compiler build … auto

======================================
不行的话 进行第四步
4. shift+ctrl+alt+/ – registy 勾选 compiler auto

依赖传递原理分析

  1. 分析一下 spring-boot-starter-parent
    1. 点进去发现它也有个爹,
    2. 在点进去,看看它爹的爹是个啥玩意
    3. 发现它爹的爹真tm能干,把一部分坐标的版本,依赖管理,插件管理都已经定义好。所以我们的springboot工程从出生起就已经具备了版本锁定等配置了(不会出现版本冲突的问题)
    4. 所以,咱们的工程就·啃老·就行了(bad action~)
  2. 再来瞅一瞅spring-boot-starter-web
    1. 咱也不知道,咱也不敢问,反正就是不是所有的jar都需要传递,用到哪个传哪个
    2. 点一下子spring-boot-starter-web,没太看懂,反正人家说重点是那些依赖
    3. 结论就是,spring-boot-starter-web没啥牛逼的,就是将web开发要用的spring-web,spring-mvc等坐标进行了打包,这样子正一下,我们就可以进行web开发了,同样提现了依赖传递,反正就是靠爹嘛
    4. 同时,还加在了tomcat,json,支持springmvc的数据请求和响应
    5. 反正我是有点懂了

自动配置原理分析

  1. 首先,自动配置根注解有着很神很深的关系
  2. 大概意思就是说,你运行你的程序,系统就自动的给你加载你要用的对象
  3. 为啥呢?
  4. 点一下子,点一下子@springbootaplication
  5. 反正这个注解类又被很多注解赋予了很多功能,也是有靠山的人
  6. 关注重点!关注重点! spring注解的复合注解,包含
    @ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration
  7. 讲解一哈子:
    1. @ComponentScan(包扫描)

component是组件,scan是扫描,所以这个注解的含义就是用来扫描组件的,

componentScan 扫描当前包及其子包下被 @Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理,
所以这个注解会自动注入所有在主程序所在包下的组件。默认把当前启动类所在的包作为扫描包的起点,

以前在ssm项目中我们需要去配置我们的包扫描

<context:component-scan base-package="com.xxx"></context:component-scan>
		2. @springbootconfigration : 表示当前类具有配置类的作用  啥玩意我也不懂
		3. @enableautoconfigration : 根据当前引入的依赖包,猜测!! 需要创建的工程类型!!!以及有可能需要创建的对象!!!根据猜测!!!自动创建工程所需要的Bean  !!!!
					1. 人家这个注解类就很霸道,程序已启动,人家就要加载所有的!!!classpath:/meta-inf/spring.factories文件,并且创建对应实例
					2. 楼一眼人家源码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
	... ... ...
}

注意
@inport(autoconfigrationInportSelector.class) 导入了autoconfigrationImportSelector类
点进去楼一眼

	 public String[] selectImports(AnnotationMetadata annotationMetadata) {
        ..................
		AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(autoConfigurationMetadata,
				annotationMetadata);
		..................
		return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
	}



protected AutoConfigurationEntry getAutoConfigurationEntry(AutoConfigurationMetadata autoConfigurationMetadata,
			AnnotationMetadata annotationMetadata) {
		
		....................
		List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
		....................
	}


protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
	// 在META-INF/spring.factories中找不到自动配置类。需要看看文件是否正确
	"No auto configuration classes found in META-INF/spring.factories. If you "
				+ "are using a custom packaging, make sure that file is correct.");
		return configurations;
	}

注意
SpringFactoriesLoader.loadFactoryNames 方法的作用就是从META-INF/spring.factories文件中读取指定类对应的类名称列表
autoconfig
重点
spring.factories 文件中有关自动配置的配置信息如下:摘抄重点,
springboot 启动之后,会自动加载 dispatcherServlet

... ... ...

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
... ... ...

重点重点重点
上面配置文件存在大量的以 Configuration 为结尾的类名称,这些类就是存有自动配置信息的类,
而SpringApplication 在获取这些类名后再加载

有一个看不懂的栗子

@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass(DispatcherServlet.class)
@AutoConfigureAfter(ServletWebServerFactoryAutoConfiguration.class)
public class DispatcherServletAutoConfiguration {

	/*
	 * The bean name for a DispatcherServlet that will be mapped to the root URL "/"
	 */
	public static final String DEFAULT_DISPATCHER_SERVLET_BEAN_NAME = "dispatcherServlet";

栗子 自动配置

  1. 创建一个bean
  2. 在resource下面创建一个/meta-inf/spring.factories文件
  3. 在里面写上这么一句话:
org.springframk.boot.autoconfig.enabeautoconfig=xx.xx.pojo.User
  1. 跑一下
  引导类
  	main
  		ApplicationContest obj = springapplication.run(xxxx)
  		obj.getbenandefi..names
  		遍历输出看看 就能看到我们刚创建的bean

springboot的配置文件

  1. appliaction.yml
  2. 细节 springboot也是个能人!会自己跑去加载你在resources目录下的appliaction.yml
  3. 为啥呢? 因为人家爹有这么一段代码
    爹里的文件

application.yml配置文件

	这玩意记住简介 强大就完了
	###  配置普通数据
		key:空格value   ==空格!!!!!!空格!!!!!==
	### 配置对象数据
		key:
			key: value
			key: value
		或者:
		key: {key1: value1,key2: value2}

细节 相同缩进代表一个级别

	### 配置map数据
			map:
				key: value
				key: value
	### 配置列表、set集
	key:
	 	- value1
	 	- value2
	或者:
   key: [value1,value2]

栗子

public class Mobile {
    private String num;
    private String brand;

public class User {

    private String username;
    private String password;

    private List<String> nicknames;

    private List<Mobile> mobiles;

yml 文件

server:
 port: 18082
user:
 username: zhangsan
 password: 123
 nicknames:
   - lisi
   - zhaoliu
 mobiles:
   - num: 1001
     brand: 华为
   - num: 1002
     brand: 小米

实体bean映射配置步骤

在 pom 文件中添加配置

# 读取配置文件注解
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
user:
  username: zhangsan
  password: 123
//user类,通过注解 @ConfigurationProperties (prefix=“配置文件中的key的前缀”)可以将配置文件中的配置自动与实体进行映射
@Component
@ConfigurationProperties(value = "user")
public class User implements Serializable{

    private String username;
    private String password;

    //生成 set get  tostring
}

测试一下

 public static void main(String[] args) {
        ApplicationContext act = SpringApplication.run(SpringbootDemo02Application.class, args);
        User user = (User) act.getBean("user");
        System.out.println(user);
    }

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

Γ(z)=0tz1etdt. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间, 文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0开始我的操作确认?结束yesno
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎


本文链接: http://www.dtmao.cc/news_show_100361.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?