Spring Boot总结

Spring Boot

1. SpringBoot的特点

        为基于Spring的开发提供更快的入门体验
        开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
        提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
        SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式

3. SpringBoot的核心功能

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

自动配置
        Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

4. 入门程序

1.  添加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>
3. 编写SpringBoot引导类
//@SpringBootApplication:标注SpringBoot的启动类,该注解具备多种功能
//SpringApplication.run(MySpringBootApplication.class) 代表运行SpringBoot的启动类,参数为SpringBoot
启动类的字节码对象
@SpringBootApplication
public class MySpringBootApplication {
   public static void main(String[] args) {
      SpringApplication.run(MySpringBootApplication.class);
   }
}
5. 编写Controller
@Controller
public class QuickStartController {
   @RequestMapping("/quick")
   @ResponseBody
   public String quick(){
      return "springboot 访问成功!";
   }
}
7. SpringBoot工程热部署

    配置热部署可以使我们不用更新代码后,不需要重启tomcat
<!--热部署配置-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
</dependency>

出现这种情况,并不是热部署配置问题,其根本原因是因为Intellij IEDA默认情况下不会自动编译,需要对IDEA进行自动编译的设置,如下:
在这里插入图片描述
然后 Shift+Ctrl+Alt+/,选择Registry,也可以.CTRL + SHIFT + A 打开窗口,输入:Registry 搜索
在这里插入图片描述
6. SpringBoot原理分析

  1. 起步依赖原理分析
<!--在我们的maven里继承了我的父类
    在spring-boot-starter-parent,定义了加载的配置文件,和许多插件
    在spring-boot-dependencies父类里定义了许多版本号,和坐标,这是为什么我们不用担心版本冲突,
-->
<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.0.1.RELEASE</version>
</parent>
  1. 分析spring-boot-starter-web
<!--
   对spring web所用到的一个jar封装
-->
<dependencies>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
</dependencies>
  1. 自动配置原理解析

按住Ctrl点击查看启动类MySpringBootApplication上的注解@SpringBootApplication

//Target Retention Documented Inherited : Java的元注解
//@SpringBootConfiguration : 里面封装了@Configuration
//@EnableAutoConfiguration:SpringBoot自动配置功能开启
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes =
AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
/**
* Exclude specific auto-configuration classes such that they will never be
applied.
* @return the classes to exclude
*/
@AliasFor(annotation = EnableAutoConfiguration.class)
Class<?>[] exclude() default {};
... ... ...
}

按住Ctrl点击查看注解@EnableAutoConfiguration

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
/*@Import(AutoConfigurationImportSelector.class) 导入了AutoConfigurationImportSelector类,

AutoConfigurationImportSelector里面SpringFactoriesLoader.loadFactoryNames 方法加载了META-INF/spring.factories文件中指定
*/
类对应的类名称列表
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
... ... ...
}

在这里插入图片描述
7. SpringBoot配置文件类型

1)配置文件信息

   <!--
    在spring-boot-starter-parent里我们可以找到加载配文件的信息
    在有多个配置文件时,配置相同的属性后面的配置文件会覆盖之前的
    
   -->
    <resources>
      <resource>
        <filtering>true</filtering>
        <directory>${basedir}/src/main/resources</directory>
        <includes>
          <include>**/application*.yml</include>
          <include>**/application*.yaml</include>
          <include>**/application*.properties</include>
        </includes>
      </resource>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
        <excludes>
          <exclude>**/application*.yml</exclude>
          <exclude>**/application*.yaml</exclude>
          <exclude>**/application*.properties</exclude>
        </excludes>
      </resource>
    </resources>

2)application.yml配置文件

#key: value
#注意:value之前有一个空格
name: haohao

#配置对象数据
#语法:yml可以靠分层来确定关系,key1前面的空格个数不限定,在yml语法中,相同缩进代表同一个级别
#key:
  #key1: value1
  #key2: value2
#或者:
#key: {key1: value1,key2: value2}
person:
  name: haohao
  age: 31
  addr: beijing
#或者
person: {name: haohao,age: 31,addr: beijing}

#配置数组(List、Set)数据
#语法:
#key:
  #- value1
  #- value2
#或者:
#key: [value1,value2]
#注意:value1与之间的 - 之间存在一个空格
city:
  - beijing
  - tianjin
  - shanghai
  - chongqing
#或者
city: [beijing,tianjin,shanghai,chongqing]
#集合中的元素是对象形式
student:
  - name: zhangsan
    age: 18
    score: 100
  - name: lisi
    age: 28
    score: 88
  - name: wangwu
    age: 38
    score: 90

2)application.yml,application.poperties配置端口

application.properties文件

//端口
server.port=8888
//后缀
server.servlet.context-path=demo

application.yml文件

server:
  port: 8888
servlet:
  context-path: /demo

2)通过注解,映射到属性上

application.yml配置如下:

person:
  name: zhangsan
  age: 18

实体Bean代码如下:

@Controller
public class QuickStartController {

   @Value("${person.name}")
   private String name;
   @Value("${person.age}")
   private Integer age;
   
   @RequestMapping("/quick")
   @ResponseBody
   public String quick(){
      return "springboot 访问成功! name="+name+",age="+age;
   }
}

也可以写成

@Controller
//配置映射
@ConfigurationProperties(prefix = "person")
public class QuickStartController {
   //注意:属性名要与yml中键一样
   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;
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值