Springboot

2023-11-03

Spring Boot能快速创建出生产级别的Spring应用,使spring开发变得简单,无需编写各种配置。

Spring Boot是整合Spring技术栈的一站式框架。

Spring Boot是简化Spring技术栈的快速开发脚手架。

Spring Boot优点:

创建独立的Spring应用内嵌web服务器自动stater依赖,简化构建配置自动配置Spring以及第三方功能提供生产级别的监控,健康检测以及外部化配置无代码生成,无需编写XML。

Spring Boot缺点:

人称版本帝,迭代快,需要时刻注意变化封装太深,内部原理复杂,不容易精通。

创建Spring Boot项目

1.快速新建Spring Boot,注意联网

2.创建maven项目,在pom中导入一个父工程

 SpringBoot要集成SpringMvc进行Controller的开发, 所以项目要导入web的启动依赖

 接下来编写一个启动类,在类上标注注解SpringBootApplication,启动类默认扫描配置类的包底下的子包及其所有类

package com.springboot;

import com.springboot.config.MyConfig;
import com.springboot.domain.cat;
import com.springboot.domain.pepole;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
//这是一个Spring Boot应用
public class MySpringBootApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MySpringBootApplication.class, args);

    }
}

在controller中,如果想让当前方法返回字符串,不再拼接视图,需要在方法上添加注解@ResponseBody。

如果想让当前controller中所有方法均返回字符串,那么在controller上的注解就可以是@RestController,不再是@Controller

简化配置

Spring Boot把所有配置都固定在application.properties里,文件名是固定写法(后缀properties,yml,yaml)。

在修改配置之前的运行信息

可以看到端口号为8080,项目名为''。

 创建application.yml,规定端口号为9999,项目名为sboot(需要注意项目名前一定要加上"/"不然会报错)

 修改后运行消息

 可以看到端口号更改为9999,项目名也更改了。

打包

当前项目还没有打包方式,默认为jar包,创建一个可执行的jar包,只要引入了 Spring Boot 的 maven 插件,就可以将项目自动打包成一个可执行的 jar 包

<!-- 打包插件 -->
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

点击右侧 maven,将我们的项目 clean、package 运行一下

 进入jar包目录打开cmd,在此目录下输入java -jar xxxxxx.jar运行jar包。

父项目做依赖管理

每个Spring Boot应用都有一个父工程,子项目会继承父项目中的依赖,子项目在使用父项目中的依赖时,就不用指定版本号了。如果想用插件的某些版本也是可以指定的。

开发导入stater场景启动器

在项目中,无需关注各种依赖,只需要导入一个场景启动器(一组依赖的集合描述)即可。

自动配置特性

自动配置好了tomcat,SpringMvc

当我们引入了 web 包后,我们的 tomcat 场景启动器,webmvc 就被 引入了,我们开发 web 的所有 jar 包就被引入了。

自动配置好了web功能,例如字符编码

包结构

只要是主程序所在包及其子包都可以被扫描到。如果无需包结构配置,那么可以在启动类上添加注解@ComponentScans("com.spb")或者@ComponentScans(@ComponentScan("com.spb")),这样会扫描spb包下所有类。注意:添加的扫描包不能为与启动类同级,与@SpringBootApplication冲突

按需加载所有自动配置项

只有导入当前场景的启动器,当前场景的自动配置 类才会生效 这就是按需加载我们所用到的场景下的所有依赖

底层注解

Spring Boot可以编写配置类来添加组件,这个类就等同于xml配置文件

//告诉Spring Boot这是一个配置类
@configuration
public class MyConfig {

   /**
   Bean的作用就是给容器中添加组件,
   以方法名作为组件id,也可以在Bean中自定义id
   返回值类型就是组件类型,
   返回值就是在容器中保存的实例 
   */
    @Bean
    public cat cat() {
        cat cat = new cat("猫", "吃", moues());
        return cat;
    }

    @Bean
    public moues moues() {
        moues moues = new moues("老鼠");
        return moues;
    }

}

Spring Boot基于5.2以后,多了一个属性proxyBeanMethods默认为true,直译就是代理bean的方法

Spring Boot 在底层 @Configuration 的两个配置

Full(全配置):proxyBeanMethods = true * 容器中会保存一个配置类的代理对象,每次调用配置类方法,都会去容器中来获取我们具体的 * 组件对象 *

Lite(轻量级配置):proxyBeanMethods = false * 容器中不会保存配置类的代理对象,每次调用配置类方法,都会重新创建一个新的对象。

需要注意的是当两个类中有引用关系时,必须为单例

springboot轻量级优点:会跳过检查容器中有没有该组件,加快项目运行速度 * 如果是全模式,外部调用方法,springboot都会来检查容器中的对象,消耗项目运行时间

除了编写配置类来注册组件,还可以使用原先的注解,将组件注册到IOC中,比如:@Compontent、@controller、@Service、@Repository 

此外还有一种给容器添加组件@Import

@Import注解需要添加到容器中的组件的类上,比如Controller,Service,Repository,Component,Configuration,还有主配置类等

它有一个 value 属性,值为数组,也就是说我们可以导入非常多的组件,只要我们将这些组件放到数组 中就可以

 条件装配-@Conditional

@ConditionalOnBean(name = "moues")如果容器中由moues组件则进行注入该组件@ConditionalOnMissingBean(name = "weicunzai")不存在该组件进行注入

解析顺序

在 spring ioc 的过程中,优先解析 @Component,@Service,@Controller 注解的类。其次解析配置 类,也就是 @Configuration 标注的类。最后开始解析配置类中定义的 bean 。

导入自定义配置文件中的资源-@ImportResource

项目中自定义的配置文件(beans.xml)中定义组件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--普通方式注入容器,直接写不会扫描-->
    <bean id="cattt" class="com.springboot.domain.cat">
        <property name="name" value="小猫"/>
        <property name="eat" value="吃"/>
        <property name="moues" ref="moues"/>
    </bean>
</beans>

让该xml生效需要在配置类上添加注解@ImportResource("classpath:xxxx.xml"),这样容器中就有了该xml文件中的bean

绑定配置-@ConfigurationProperties

在项目中将经常变化的东西编写到配置文件中,例如数据库信息。那么将配置文件中的数据信息封装到实体对象中,就只需要在类中添加一个注解@ConfigurationProperties

配置文件中声明属性

 那么对应的实体类就必须注册到容器中,并且实体类属性名和配置文件中属性名必须一致

package com.springboot.domain;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "peo")
public class pepole {

    private String name;

    private String addres;

    public pepole() {
    }

    public pepole(String name, String addres) {
        this.name = name;
        this.addres = addres;

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddres() {
        return addres;
    }

    public void setAddres(String addres) {
        this.addres = addres;
    }

    @Override
    public String toString() {
        return "pepole{" +
                "name='" + name + '\'' +
                ", addres='" + addres + '\'' +
                '}';
    }
}

此外还有一种方式可以使配置文件中属性绑定到实体类中@EnableConfigurationProperties(xxx.class)

首先将实体类从组件中移除,并在配置类上方开启实体类的配置绑定功能

 @Order

简单实践

Lombok

在之前的开发中,实体类中的属性封装后,必须向外界提供setter/getter方法,有参,无参构造等,但Lombok就大大简化了这些写法

在项目中引入lombok依赖

<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

只是引入依赖还不够,需要在插件市场下载插件

file->settings->plugins,然后搜索Lombok

那么实体类就只需要添加注解

@Data就有了setter/getter方法

@ToString会在编译时生成toString方法

@AllArgsConstructor全参构造

@NoArgsConstructor无参构造

@EqualsAndHashCode重写equals和hashCode方法

@Slf4j打印日志,它会自动为当前类注入一个log属性,在方法中使用log.info("xxxxxxx");

热部署

在每次修改完页面或者java代码,都需要关掉项目,重启进行测试,较为麻烦。devtools使得不用重启就可以更新代码进行测试

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

在编写新的代码后ctrl+f9重新编译即可

配置文件用法

基本用法

key: value;kv之间有空格

大小写敏感 使用缩进表示层级关系

缩进不允许使用 tab,只允许空格

相同层级的元素左对齐即可

'#' 表示注释

数据类型

单个的date、boolean、string、number、null

k: v

对象:键值对的集合map、hash、set、object

#行内写法

k: {k1:v1,k2:v2,k3,v3}

#多行写法

k:

  k1: v1

  k2: v2

  k3: v3

数组:一组按次序排列的值array、list、queue

#行内写法

k: [v1,v2,v3]

#多行写法

k:

  -v1

  -v2

  -v3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot 的相关文章

随机推荐

  • IPsec技术介绍(转)

    目 录 IPsec IPsec简介 IPsec的协议实现 IPsec基本概念 加密卡 IPsec虚拟隧道接口 使用IPsec保护IPv6路由协议 IKE IKE简介 IKE的安全机制 IKE的交换过程 IKE在IPsec中的作用 IPsec
  • java定时任务实现的几种方式

    摘要 在开发测试工具的应用后台 经常听到同事说要做个定时任务把做日志处理 或者数据清理 包括做些复杂的业务计算逻辑 在选择定时任务的时候 怎么能够快速实现 并且选择一种更适合自己的方式呢 我这里把定时任务的实现收集整理了一些方法 希望可以帮
  • python中sorted和sort的key

    目录 sort与sorted区别 1 调用方式 2 返回值 3 操作对象是否变化 什么对象可以排序 sort sorted 排序的key 函数 方法 自己造 有趣的排序题 多级排序 sort与sorted区别 1 调用方式 sort是方法
  • chisel可选值/模式匹配实例

    一 scala可选值语法 可选值就是类型为Option T 的一个值 其中 Option是标准库里的一个密封抽象类 T可以是任意的类型 例如标准类型或自定义的类 并且T是协变的 简单来说 就是如果类型T是类型U的超类 那么Option T
  • Keil uVision添加新文件夹

    Keil uVision5是款比较优秀的IDE编译器 最近接手一个项目 代码已经形成一个版本 在此基础上新增一些新功能 由于不破坏原先结构的目的 因此新增的部分采用独立方式 存放在独立的文件夹 一开始死活编译不通过 提示也怪怪的 后来经过折
  • js中从blob提取二进制

    文章结构 一 所遇到的问题 二 解决方法 一 服务器端通过websocket向浏览器端传输图片 二进制 需要根据不同的图片把图片显示在不同的位置 可行的一个方法是先把图片转化成二进制数组 再把二进制数组和一个字节的图片标识拼接在一块传输给浏
  • VSCode:设置默认换行符

    windows默认是回车换行符 即 r n linux默认是换行符 即 n 同时在两种操作系统里编辑 经常会造成文件里含有 r 导致在linux会显示 M 也就是回车符 可以对vscode的默认换行符进行设置 打开VSCode菜单文件 gt
  • Linux0.11内核--系统中断处理程序int 0x80实现原理

    原文地址 http blog csdn net geekcome article details 6398414 系统调用是一个软中断 中断号是0x80 它是上层应用程序与Linux系统内核进行交互通信的唯一接口 这个中断的设置在kerne
  • C语言参悟-数据类型

    C语言的数据类型 一 概述 二 基础数据类型 1 整数 1 计算 2 索引 2 浮点数 3 字符 4 字符串 5 指针 三 特殊数据类型 1 枚举 2 共用体 2 struct结构体 四 数据类型修饰符 1 const 2 unsigned
  • 数据仓库分层设计

    文章参考http ierda blog 163 com blog static 77469587201326105956470 https blog csdn net kwu ganymede article details 5136742
  • RTSP和SDP协议学习

    RTSP和SDP协议学习 版本说明 版本 作者 日期 备注 0 1 loon 2019 2 14 初稿 目录 文章目录 RTSP和SDP协议学习 版本说明 目录 第一部分 RTSP协议 一 RTSP协议概述 二 RTSP协议与HTTP协议区
  • 补遗篇之命名空间污染

    概念 C标准规定 除非用static限定 否则全局变量与函数都作用于全局 见补遗篇static 也就是说一个模块中定义的函数与全局变量可在所有其他模块中被调用 这导致C的符号命名没有层次 不同模块间名字相互冲突的概率很高 学术的表述就是 C
  • gdb 安装编译

    arm linux gdb gdbserver的编译安装 下载gdb 7 5 tar gz http www gnu org software gdb download ftp sourceware org pub gdb releases
  • scikit-learn工具包中分类模型predict_proba、predict、decision_function用法详解

    在使用sklearn训练完分类模型后 下一步就是要验证一下模型的预测结果 对于分类模型 sklearn中通常提供了predict proba predict decision function三种方法来展示模型对于输入样本的评判结果 说明一
  • c++ char*, char[], string相互转换

    char 转 char char ch abcdef char s ch char 转 char strcpy char s abcdef char ch 100 strcpy ch s 循环赋值 char arr 20 char tmp
  • 1.鸡兔同笼(POJ3237)

    一个笼子里面关了若干只鸡和兔子 鸡有2只脚 兔子有4只脚 没有例外 已经知道了笼子里面脚的总数a 则笼子里面至少有多少只动物 至多有多少只动物 nCases代表测试组数 nFeets代表每一组一共拥有的足数 然后分为三种情况 能被4整除 则
  • Numpy攻略系列:高级索引机制之位置列表型索引,布尔型索引

    Numpy攻略系列 高级索引机制之位置列表型索引 布尔型索引 所谓高级索引就是不使用整数或者切片作为索引值 在这一节重点介绍三类高级索引 常规的高级索引 位置列表型高级索引 布尔型高级索引剩下来两类索引 位置列表型索引 开始之前需要介绍需要
  • 第十四届蓝桥杯模拟赛第一期试题【Java解析】

    目录 A 二进制位数 问题描述 答案提交 参考答案 解析 B 晨跑 问题描述 答案提交 参考答案 解析 C 调和级数 问题描述 答案提交 参考答案 解析 D 山谷 问题描述 答案提交 参考答案 解析 E 最小矩阵 问题描述 答案提交 答案
  • day5笔记

    10 删除目录 删除空目录 rmdir 路径 目录名 示例 rmdir day1 11 创建文件 touch 路径 文件名 示例 touch 1 c touch 2 c day2 2 txt 12 删除文件 rm 路径
  • Springboot

    Spring Boot能快速创建出生产级别的Spring应用 使spring开发变得简单 无需编写各种配置 Spring Boot是整合Spring技术栈的一站式框架 Spring Boot是简化Spring技术栈的快速开发脚手架 Spri