【SpringBoot笔记(一)】之SpringBoot入门,原理分析,配置文件

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. SpringBoot

(一) SpringBoot的特点

        1. 约定优于配置,没有代码生成,也没有XML配置,同时也可以修改默认值来满足特定的需求。

        2. 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器,安全,指标,健康监测,外部配置等。

        3. SpringBoot不是对Spring功能上地增强,而是提供了一种快速使用Spring的方式。

(二) SpringBoot的核心功能

1. 起步依赖

        起步依赖的本质是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起支持某种功能,即打包一些坐标,提供默认的功能。

2. 自动配置

        SpringBoot的自动配置是应用程序启动时考虑了多种因素,由SpringBoot自动决定Spring配置应该选择什么配置的过程。

(三) SpringBoot快速入门

1. 创建Maven工程

        在IDEA中创建一个Maven工程。

2. 添加SpringBoot的起步依赖

        SpringBoot的核心功能是起步依赖,我们需要在项目中继承SpringBoot的起步依赖spring-boot-starter-parent,

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>

        同时,由于SpringBoot要集成SpringMVC进行Controller的开发,因此项目要导入Web的起步依赖,在之前的Spring项目中,我们不仅要导入Spring的坐标,还要导入SpringMVC的坐标以及其他坐标,现在,我们直接导入一个web的起步依赖就可以了。

<dependencies>
    <dependency>
        <!--Web功能的起步依赖-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
3. 导入SpringBoot引导类

        配置完基本的信息后,我们需要添加一个SpringBoot的引导类,该类用于启动Spring,即运行SpringApplication,注意,SpringApplication的run函数中的参数是该引导类的字节码。同时要在该类上添加注解@SpringBootApplication标识这是一个SpringBoot的引导类。

package com.springboot;

import org.springframework.boot.SpringApplication;

@org.springframework.boot.autoconfigure.SpringBootApplication
public class SpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class);
    }
}

4.	编写Controller
在引导类的同级包或者子级包中创建一个ControllerController的写法以及注解与Spring中是相同的。

package com.springboot.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 springboot";
    }
}

(四) SpringBoot工程热部署

        在开发阶段,我们会反复地修改类,页面等资源,每次修改后都要重新启动修改才能够生效,这样非常麻烦,如何在不重启的情况下降修改生效呢?这就需要热部署来帮忙了。

  1. 首先在pom.xml中添加如部署的依赖
<!-- 热部署配置-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>
  1. 接下来设置IDEA的自动编译

        选择File -> Settings -> Compiler 勾选 Build project automatically;

        然后按住 Shift + Ctrl + Alt + /,选择Registry,勾选 compiler.automake.allow.when.app.running。

  1. 设置IDEA

    设置IDEA中的Spring Boot 设置Edit Configuration,将 On “Update” action 和 On frame deactivation 都改为 Update classes and resources。

(五) 使用IDEA创建SpringBoot项目

        在新建项目处,选择Spring Initializer,初始化一个Spring项目,重点是选择各种SpringBoot需要的启动依赖,根据自己的需要进行选择,SpringBoot会自动将依赖添加到pom.xml文件中。

(六) SpringBoot原理分析

1. 起步依赖原理分析
(1) 分析spring-boot-starter-parent

        我们在pom.xml中继承了spring-boot-starter-parent,点进去可以发现它又继承了spring-boot-starter-dependencies,再点进去发现,spring-boot-starter-dependencies中都是依赖的坐标,依赖管理,插件管理。也就是说在SpringBoot工程中继承了spring-boot-starter-parent后已经具备版本锁定等配置了,因此起步依赖的作用就是进行依赖的传递。

(2)分析spring-boot-starter-web

        我们在pom.xml中导入了web的依赖spring-boot-starter-web,只需要这一个依赖,我们就可以使用springmvc来开发,点进去看看发现spring-boot-starter-web就是将web开发要使用的spring-web,spring-webmvc等坐标进行了打包,同样是依赖传递的作用。

2. 自动配置原理解析

        SpringBoot的自动配置是通过引导类的@SpringBootApplication注解完成的,点进去可以看到其中包括了很多注解,主要的是@SpringBootConfiguration,@EnableAutoConfiguration@ComponentScan注解。

(1)@SpringBootConfiguration

        这个注解表示这是一个配置类,我们可以在引导类中进行Spring的配置。

(2)@EnableAutoConfiguration

        这个注解表示开启SpringBoot的自动配置功能。

(3)@ComponentScan

        这个注解表示将会扫描引导类所在包下的所有类

(七) SpringBoot配置文件

1. SpringBoot配置文件作用

        SpringBoot是基于约定的,所以很多配置都有默认值,但是如果想使用自己的配置替换默认的配置的话,就可以使用application.properties或者application.yml(application.yaml)来进行配置。

        SpringBoot默认从Resources目录下加载application*.properties或者application.yml(application.yaml)文件。.properties的加载顺序在.yam文件之后,因此,.properties文件中的内容会覆盖.yml中的内容。

2. application*.yml配置文件
(1) 概述

        YML文件格式是YAML(YAML Aint Markup Language)编写的文件格式,YAML是一种直观地能够被电脑识别的数据序列化格式,容易阅读也容易与脚本交互,可以被不同语言导入。扩展名为.yaml或者.yaml。

(2) yml配置文件语法
a) 普通元数据

        yml用缩进表示等级,如普通的元数据是在冒号后面加上一个空格,如下所示:

key: value
b) 对象数据

        对象拥有多个数据,同一层级的用相同的缩进表示,如下所示,person对象有多个属性:

person:
	name: haohao
	age: 31
	addr: beijing

        或者可以写在同一行中,属性之间用逗号分隔开:

person:	{name: haohao,age: 31,addr: beijing}
c) 数组集合数据

        对于数组,集合数据,就要使用 “-” 加上 空格来表示这是集合中的一个数据,如下所示:

city:
	- Beijing
	- Tianjin
	- shanghai

        或者写在一行之中:

city: [Beijing,tianjin,shanhai]

        若数组中有对象数据,那么直接将对象的属性一一写在数组的一个数据之中即可,如下所示:

student:
- name: zhangsan
age: 18
score: 100
- name: list
age: 21
score: 88

3. 配置文件与配置类的属性映射方式
(1)使用注解@Value进行映射

        我们在配置文件中配置了值以后,如何让Spring知道这些配置的作用呢?像Spring默认的配置键名Spring是认识的,但是对于那些我们自己创建的键名就无法识别了。因此,我们可以使用@Value注解将配置的键值映射到一个Spring管理的Bean的字段上。

如,配置文件application.yml中配置如下:

person:
name: zhangsan
age: 18

        我们在类中将person对象的name属性和age属性一一映射:

@Controller
public class QuickController{
		@Value(“${person.name})
		private String name;
		@Value(“${person.age})
		private Integer age;

		@RequestMapping(/quick”)
		@ResponseBody
		public String quick(){
			return name + age;
		}
}

        这种方式映射地非常准确,但是也非常地繁琐,需要一个个地进行映射。

(2)使用注解@ConfigurationProperties映射

        注解@ConfigurrationProperties能够将配置文件中的配置自动与实体进行映射,如在注解的参数中设置配置文件中键值作为前缀,只要类中的参数与配置文件中相同,就可以直接映射,且该参数必须提供get和set方法。

application.yml配置如下:

person:
name: zhangsan
age: 18

类中的代码如下所示:

@Controller
@ConfigurationProperties(prefix = "person")
public class QuickStartController {
private String name;
private Integer age;
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "springboot 访问成功! name="+name+",age="+age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值