狂神springboot

本文详细介绍了SpringBoot的核心思想、微服务架构及其优缺点,以及如何创建第一个SpringBoot程序。通过自动配置原理和主启动run方法的解析,展示了SpringBoot的便捷性。此外,文章还探讨了yaml配置、属性赋值、JSR303验证、多环境配置等关键点,并深入到web开发、静态资源管理、thymeleaf模板引擎的使用。最后,通过一个员工管理系统实例,讲解了登录功能、页面国际化、登录拦截器、数据源Druid以及Mybatis的整合。
摘要由CSDN通过智能技术生成

码云私人令牌70e0a7b76ff3e5f2d8871729ac48ee28

a.该阶段如何学习

img

b.SpringBoot

核心思想:约定大于配置

基于Spring,默认配置了许多框架的使用,用于敏捷,迅速开发基于Spring框架的应用程序

SpringBoot的优点:

  • 为所有的Spring开发者更快的入门
  • 开箱即用,提供各种默认配置,简化项目配置
  • 内嵌式简化web项目
  • 没有多余代码,和xml配置

c.微服务框架

将service变成小模块

一种架构风格,建成一系类小服务组合,可以通过http进行互通

缺点:给部署和运维带来难度

单体应用架构:易于开发和测试,修改维护困难

微服务架构:将独立的元素动态组合,节省资源,每个功能元素的服务都可以替换,升级

d.第一个SpringBoot程序

1.创建项目

原理:官方集成了****https://start.spring.io/这个spring的官网

使用idea创建,选择spring initalizr,依赖用spring web,Java8使用

img

img

2.创建包

需要Apllication的同级目录下

img

细节:

  • web层简化到只要写一个接口
  • 打包形成的jar包就是一个个服务,前后端分离,数据由后端写的 服务jar包接口提供,不需要依赖idea,本身就是一个可以执行的程序
  • 创建时包名可以只要前面部分

controller

@Controller
@RequestMapping("/hello")
public class HelloController {
   
    @GetMapping("/hello")
    @ResponseBody
    public String hello(){
   
    return "hello";
    }
}

application.properties

\#更改项目的端口号 
server.port=8081

e.自动配置原理

pom.xml

  • spring-boot-dependencies : 核心依赖在在父工程中
  • 引入依赖时,不需要指定版本号,因为有这些版本仓库

启动器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

springboot的启动场景

比如spring-boot-starter-web,会自动导入web的所有依赖

SpringBoot会将所有功能场景,变成一个个启动器,使用功能时,只要找到对应的启动器

主程序

//@SpringBootApplication标注这是一个SpringBoot项目
@SpringBootApplication
public class HellowWordApplication {
   
    //将springboot启动
    public static void main(String[] args) {
   
        SpringApplication.run(HellowWordApplication.class, args);
    }

}

注解 ctrl+左键 进入注解

SpringBootConfiguration :springboot配置
Configuration spring配置
Component spring的一个组件

结论:SpringBoot的所有自动配置都是在启动时扫描并加载:spring.factories所有的自动配置类都在这里面,会以类名的方式将需要的组件添加到容器中,但是不一定会生效,要判断条件是否成立,只有导入了对应的starter ,有了对应的启动器,自动装配才会生效,才会配置成功,这样以前需要手动配置的东西,就自动配置好了;

img

img

f.主启动run方法

不只是运行了一个run方法,开启了一个服务

1.首先判断是一个普通项目还是web项目

2.推断并设置main方法的定义类,找到运行的主类

3.存在监听器,获取上下文,处理bean

g.yaml语法讲解

原理:自定义才能解决更多的功能,自动配置只能写个helloword

springboot使用全局的配置文件,配置文件是固定的

application.properties

语法:key=value

server.port=8081

applicaion.yaml

key:空格value

server
poet: 8081

语法结构

#普通的key=value
name: qingjiang
#对象
student:
  name: qingian
  age: 3
#行内写法
student1: {name: qinjiang,age: 15}
#数组
pets:
  -cat
  -dog
  -pig
pets1: [cat,dog,pig]
#可以注入到配置类中,值可以写到yaml中,Java类中可以为空

细节:

对空格的要求很高,空格表示层级关系
student:
name:
    age:表示student和name两个类,age.name age下的属性 
    

h.给属性赋值的几种方式

原理:

1.new

2.Spring方式@Value

类
@Component
public class Dog {
    @Value("旺财")
    private String name;
    @Value("3")
    private Integer age;
测试
class SpringBoot02ConfigApplicationTests {
    @Autowired
    private Dog dog;
    @Test
    void contextLoads() {
        System.out.println(dog );
    }

}

3.yaml直接注入

类注入,只要在spring中就能自动注入

为了确保能够扫描到类,需要加入@Component

person类

/**
将配置文件中的配置的每一个属性的值,一一映射到本类中,进行绑定。
只要SpringBoot容器中的组件才能使用@configurationProperties(prefix = "person")
不只是实体类中能使用,配置类config也可以
*/
@ConfigurationProperties(prefix = "person")

application.yaml

person:
  name: qiang
  age: 20
  happy: true
  birth: 2001/9/06
  maps: {k1: v1,k2: v2}
  lists:
    -code
    -music
    -boy
  dog:
    name: 旺财
    age: 3

扩展:

yaml中可以使用EI表达式

name: ${person.hello:hello}_旺财

i.JSR303验证

img

@Validated //数据校验
public class Person {
    @Email()

松散绑定

yaml中可以用first-name,可以与类中firstName对应,因为-后面是默认大写的

j.多环境配置及配置文件位置

img

优先级1234,默认的是优先级最低的

多环境切换

同一个项目中有不同的环境

application.yml

server:
  port: 8081
spring:
  profiles:
    active: dev
---
server:
  port: 8082
spring:
  profiles: dev
---
server:
  port: 8083
spring:
  profiles: test

k.自动配置原理再理解

img

SpringBoot程序中,在spring.factories有大量的自动配置类xxxconfiguration,当我们要写某个功能时,先判断功能有没有在自动配置类中,有的话然后看所需要的组件有没有在自动配置类,存在组件的话就不用手动配置,不存在需要手动添加组件,需要从properties自动配置类中获取某些属性,然后在yml配置文件中给属性赋值就行了

img

l.web开发探究

img

m.静态资源导入探究

创建应用前先写一个 controller,确保tomcat等一些配置能用

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello,world";
    }
}

看源码,需要下载

找类,双击shirt

img

if (!this.resourceProperties.isAddMappings()) {
   
      logger.debug("Default resource handling disabled");
      return;
   }
   addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
   addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
   
      registration.addResourceLocations(this.resourceProperties.getStaticLocations());
      if (this.servletContext != null) {
   
         ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
         registration.addResourceLocations(resource);
      }
   });
}

img

静态资源可以放在

  • resources目录下的public static(默认)resources和根目录/* 访问地址 localhost:8080/hello.js*
  • webjars 访问地址localhost:8080/webjars/
  • 优先级 resources>static>public

n.首页和图标定制

首页放在static resouces public都可

图标定制 版本更新,源码也会改变

o.thymeleaf模板引擎

模板引擎thymeleaf:其实jsp(后台查询数据发给jsp,jsp可以实现数据的显示,和交互)也是一个模板引擎,由于springboot使用war包和内嵌tomcat,不支持jsp,只能用纯静态页面,所以SpringBoot用thymeleaf代替jsp

thymeleaf官网:Thymeleaf 教程 - Thymeleaf | Docs4dev

模板引擎工作原理:按照data中的数据把hello${user}表达式解析,把数据填充到指定位置,然后把内容写出去

img

原理:首先需要模板引擎thymeleaf支持数据显示,并且在templates中的所有页面都只能通过Controller跳转,不能通过RestController

1.maven导入thymeleaf依赖

<!--thymeleaf-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2.templates中写html页面

test.html

<!DOCTYPE html>
<html lang="en" xmlns:th
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值