SpringBoot01

SpringBoot

微服务阶段

JavaSE:OOP的编程思想,及Java的基础应用

mysql:数据的持久化

html+css+js+vue+框架:视图层

Javaweb:独立开发MVC三层架构的网站,原始状态

ssm:框架,简化开发流程,配置变得复杂

war:tomcat服务器运行

spring再简化:SpringBoot-jar:内嵌tomcat,微服务架构

管理微服务:SpringCloud

SpringBoot核心:自动装配

学习路线

1633597951302

Spring的目的:简化企业级应用开发而创建

Spring如何简化开发的:

  1. 基于POJO的轻量级和最小入侵性编程
  2. 通过IOC,依赖注入(DI)和面向接口实现松耦合
  3. 基于切面(AOP)和惯例进行声明式编程
  4. 通过切面和模板减少样式代码

SpringBoot是如何做的:

  1. 约定大于配置
  2. 简化配置
  3. 集成了很多第三方库
  4. 集成容器简化web开发

技术创建的发展规律:

  1. 从一个复杂的应用场景衍生一种规范框架,人们只需要进行各种配置而不需要自己去实现他,这时候强大的配置成了优点,发展到一定程度,人们根据实际的应用情况,选取其中的实用功能和设计精华,重构出一些轻量级的框架,之后为了提高开发效率,简化各种繁琐的配置,开始提倡"约定大于配置",进而衍生出一些一战式的解决方案。

微服务的架构

  1. 单体应用架构:所有的功能都放到一个war包内(数据库,web访问,业务功能等)
    1. 优点
      1. 易于开发和测试
      2. 方便部署
      3. 做扩展时将war放到多个服务器,然后做负载均衡就行
    2. 缺点:
      1. 不易更新(需要替换整个服务)
      2. 不易维护,不易分工合作
  2. 微服务架构(马丁弗勒):将业务功能拆分成为一个一个的模块,模块与模块可以自由组合成为一个应用
    1. 节省调用资源
    2. 每个功能元素的服务都是可替换的,可独立升级

第一个SpringBoot

  1. 官网创建一个SpringBoot项目然后导入IDEA( Spring Initializr
  2. IDEA创建一个SpringBoot项目(本质,通过网站创建的)

结构介绍

  1. 主启动类1633600976478
  2. 项目源数据信息:创建时候输入的Project Metadata部分,也就是Maven项目的基本元素,包括:groupid、artifactid、version、name、description等
  3. parent:继承spring-boot-starter-parent的依赖管理,控制版本与打包等内容
  4. dependencies:项目的具体依赖,
  5. build:构建配置部分,默认使用了spring-boot-maven-plugin,配合spring-boot-starter-parent就可以把springBooot应用打包成jar运行

基本操作

  1. *Application.java统计目录下创建包
  2. 自定义banner
    1. resource目录下,新建banner.txt

基本原理

  1. 基本配置

    1. pom.xml
      1. spring-boot-dependencies:核心依赖都在父工程中,
      2. 引入依赖的时候不需要指定版本就是因为有这个版本仓库进行管理
    2. 启动器
      1. 1633602087141
      2. 启动器:springboot的启动场景
      3. 编写了spring-boot-starter-web就会自动导入web环境所有的依赖
      4. springboot将所有的功能场景都变成了一个一个的启动器(父工程中管理了的依赖都可以直接启动)
      5. 使用功能时直接开启启动就可以了
    3. 主程序:
      1. 1633602449120
      2. 注解与方法
  2. 总结:

    springboot所有自动配置都是在启动的时候扫描加载并加载的,spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的starter,就有对应的启动器了,自动配置就会生效,然后配置成功。

    1. springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值
    2. 将这些自动配置的类导入容器,自动配置就会生效,进行自动配置额
    3. 以前需要手动配置的东西,现在springboot进行配置
    4. 整个JaveEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.2.0.RELEASE.jar这个包下
    5. springboot会将所有需要导入的组件已类名的形式返回,这些组件就会被添加到容器中
    6. 容器中也会存在很多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件,并自动配置
    7. 有了自动配置,就简化了手动配置的工作。
  3. run方法做了哪些事情

    1. 推断应用的类型是普通项目还是Web项目

    2. 查找并加载所有可用初始化器,设置到initializers属性中

    3. 找出所有的应用程序监听器,设置到listeners属性中

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

  4. 配置文件

    1. 名称固定application

    2. application.properties

      1. 语法结构 key=value
    3. application.yml

      1. 语法结构 key=空格value
    4. 作用:修改springboot的默认配置

    5. yaml配置文件的强大之处

      1. 直接给实体类进行赋值(@ConfigurationProperties(prefix=""))

      2. properties也可以进行赋值,只是更繁琐一些(@PropertySource(value="classpath:***.properties")@Value("${name}")//写在属性上)

      3. 基本语法

        # 映射实体类属性
        person:
          name: haha${random.uuid}
          age: 12
          birth: 2021/09/01
          happy: true
          maps: {aaa: ccc,bbb: qqq}
          lists:
            - haha
            - object
          dog:
            name: ${person.hello:hello_}白虎
            age: 20
        
      4. SJR303数据校验:1633610713211

  5. 配置文件生效的位置:

    1. 1633611442239优先级按照1234排序

    2. 1633612022046

    3. 多环境配置

      # 生效配置
      spring:  
      	profiles:    
      		active: dev
      
    4. debug: true
      # 可以查看哪些配置类生效了,没有生效
      

自动配置原理

  1. SpringBoot启动会加载大量的自动配置类
  2. 查看需要使用的功能在SpringBoot默认写好的自动配置类中是否存在
  3. 查看自动配置类中配置了哪些组件,若要使用的组件存在,则不进行手动配置了
  4. 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,在配置文件中(application.yaml)可以执行属性的值
  5. xxxxAutoConfiguration:自动配置类,给容器中添加组件
  6. xxxxProperties:封装配置文件中相关属性

web开发

  1. 导入静态资源
  2. 首页定制
  3. jsp、模板引擎Thymeleaf
  4. 装配扩展SpringMVC
  5. 增删改查
  6. 拦截器
  7. 国际化
导入静态资源
  1. 什么是webjars
    1. 以maven的形式导入静态资源文件
    2. 用jar包的形式进行了一次封装,本质还是静态资源文件
    3. 访问路径http://localhost:8080/webjars/
  2. 可以存放静态资源的路径
    1. classpath:/META-INF/resources/
    2. classpath:/resources/
    3. classpath:/static/
    4. classpath:/public/
    5. 优先级resources > static > public
    6. 访问路径http://localhost:8080/
定制首页
  1. 在public或者static或者resources下编写页面index.html,名称固定

  2. 也可以放到templates下,templates中的资源只能通过Controller跳转进行访问,需要开启模板引擎

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

thymeleaf语法

  1. 引入命名空间xmlns:th="http://www.thymeleaf.org"
  2. 使用thymeleaf语法取出model中的值
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div th:text="${msg}"></div>
<div th:utext="${msgLable}"></div>
<h3 th:each="user:${msgLable}" th:text="${user}"></h3>
<h3 th:each="user:${list}">[[${user}]]</h3>
</body>
</html>

SpringMVC扩展

@Configuration
public class MyMVCConfiguration implements WebMvcConfigurer {
    //控制视图跳转
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/hello").setViewName("test");
    }
}

  1. static下的静态资源有时候不能进行访问,需要maven 进行clean,浏览器也需要进行缓存清理
posted @ 2021-10-07 23:21  争取做百分之一  阅读(29)  评论(0)    收藏  举报