Java SpringBoot高级用法详解

编辑: admin 分类: java 发布时间: 2021-12-03 来源:互联网
目录
  • 1,IDEA中Lombok作用
    • 创建项目
  • 2.pom.xml说明
    • 2.1 pom.xml标签说明
    • 2.2 依赖的相关说明
    • 2.3 SHA1介绍
      • SpringBoot高级用法
      • YML文件说明
  • 3.需求说明
    • 3.2利用properties文件为属性赋值
    • 总结

      1,IDEA中Lombok作用

      数据库: 库 表 字段 对应的值 user表(id,name,age)

      实体对象pojo: 用来封装数据库中的数据 User类(id,name,age)

      实体对象方法: Get/Set/toString/无参构造/有参构造/equals/hashcode

      lombok作用: 自动生成上述的方法.

      创建项目

      依赖的版本 2.4.1、

      2.pom.xml说明

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
      <!--  该配置表示Maven坐标  -->
      <!--  项目的组id  -->
          <groupId>com.jt</groupId>
      <!--  项目名称  -->
          <artifactId>springboot_demo1</artifactId>
      <!--  项目版本号 -->
          <version>0.0.1-SNAPSHOT</version>
          <name>springboot_demo1</name>
          <description>Demo project for Spring Boot</description>
       
          <properties>
              <java.version>1.8</java.version>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
              <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
              <spring-boot.version>2.4.1</spring-boot.version>
          </properties>
       
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <!--  SpringBoot的启动项   wep  相当于引入MVC框架
                          思想:"开箱即用"!!!
                          说明: 只需要引入jar包,简单的配置即可以使用该功能
                       -->
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
       
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-test</artifactId>
                  <scope>test</scope>
              </dependency>
          </dependencies>
       
          <dependencyManagement>
              <dependencies>
                  <!--相当于继承了一个父级-->
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-dependencies</artifactId>
                      <version>${spring-boot.version}</version>
                      <!--通过pom标识 是一个父级 -->
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>
       
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-compiler-plugin</artifactId>
                      <version>3.8.1</version>
                      <configuration>
                          <source>1.8</source>
                          <target>1.8</target>
                          <encoding>UTF-8</encoding>
                      </configuration>
                  </plugin>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                      <version>2.4.1</version>
                      <configuration>
                          <mainClass>com.jt.SpringbootDemo1Application</mainClass>
                      </configuration>
                      <executions>
                          <execution>
                              <id>repackage</id>
                              <goals>
                                  <goal>repackage</goal>
                              </goals>
                          </execution>
                      </executions>
                  </plugin>
              </plugins>
          </build>
       
      </project>

      2.1 pom.xml标签说明

      说明: 该坐标在本地仓库中是唯一标识符.是当前项目打包/被依赖的唯一 路径.

      根据坐标查找jar包

      扩展: 如果项目中依赖第三方jar包文件报错! 如何处理?

      问题说明: 有时根据坐标下载jar包文件时,可能由于网络问题,导致jar包下载不完整.

      解决方案: 根据第三方的坐标,查找到本地仓库的位置,之后删除 重新下载.

      • 默认条件下 jar包
      • web项目可以打成 war包
      • 如果该项目是父级项目 则写 pom

      通过dependencyManagement标签统一定义父级工程,在其中定义了 springBoot项目所有兼容的版本信息.

      所以依赖项中不需要添加版本号,也可以正常依赖jar包文件

      2.2 依赖的相关说明

      思想: “开箱即用” 是springBoot设计的核心 越来越简单!!!

      什么是启动项: SpringBoot为整合第三方框架,写了启动项的jar包文件, 其中官方已经将所有的配置信息/需要依赖的jar包文件提前测试并且定义.

      说明: maven中的jar包是有依赖的传递性

      例如: A项目依赖B.jar包, B.jar依赖C.jar. 在项目中,只需要添加B.jar. 则B/C.jar都会自动添加.

      实际应用: 如图web.jar包中依赖了很多其它的第三方jar包文件.

      mavenjar包查询网址: https://mvnrepository.com/

      本地仓库文件说明:

      1. 当maven开始解析项目的POM.xml文件时,根据依赖的坐标,找到指定的 jar包文件.之后添加该依赖.

      2. 之后扫描当前文件中的 xxx.pom文件.

      3. 扫描pom.xml文件中的依赖信息dependency

      4. 根据dependency的坐标 重复执行上述的操作.直到所有的依赖都添加完 成.

      需求: 网络数据传输,一般都需要进行加密处理.maven中采用SHA1数字签 名的加密算法,保证数据传递的有效性!!!

      说明: maven数据传递有效性原理图.

      2.3 SHA1介绍

      SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函 数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理 标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列 值通常的呈现形式为**40个十六进制数**。

      关键字: 数字证书.

      问题1: 常见hashcode值 有多少位16进制数组成??? 8位

      问题2: 8位16进制数,有多少种排列组合? 2^32种

      00000000-FFFFFFFF

      问题3: 相同数据进行hash(算法相同),问题: 值是否相同? 必定相同

      问题4: 不同数据进行hash(算法相同),问题: 值是否相同? 可能相同 hash碰撞

      问题5: 一个数据1kb, 一个数据ITB 问: hash计算的速度谁快? “一样快” hash本质

      SpringBoot高级用法

      Pro文件说明

      • pro文件语法
      • 数据结构类型:   key=value  特别注意不要有空格.
      • 字符集编码:    程序读取文件时,默认采用ISO-8859-1编码
      • 弊端: 所有的key都必须写完整,不能缩进

      YML文件说明

      YML文件的语法

      • 数据结构   key-value结构
      • 写法:     key:(空格)value
      • 层级代码结构,注意缩进
      • 字符集  文件读取时,默认采用UTF-8编码 可以写中文

      server:

        port: 8080

      3.需求说明

      说明: 有时将数据写死,不方便后续扩展,需要为属性动态赋值.
      解决方案: 有些数据是后台特有的.一般可以将数据写到配置文件中,之后 为属性动态赋值

      编辑YML

      #YML文件的语法
      #1,数据结构  key-value结构
      #2,写法:    key:(空格)value
      #3,层及代码结构,注意缩进
      #4,字符集 文件读取时,默认采取UTF-8编码 可以写中文
      # 规则: 命名时最好指定前缀.
      server:
        port: 8080
        # 指定业务的key
      mysql:
        Username: root|
        Password: root||

       启动类

      package com.jt;
       
      //import org.springframework.beans.factory.annotation.Value;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      //import org.springframework.web.bind.annotation.RequestMapping;
       
      @SpringBootApplication
      public class SpringbootDemo1Application {
       
          public static void main(String[] args) {
              SpringApplication.run(SpringbootDemo1Application.class, args);
          }
       
          }

       动态为属性赋值

      package com.jt.contraller;
       
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
       
      /**
       * 说明:
       *  1.将该类交给Spring容器管理
       *  2.SpringMVC负责调用该对象接收用户的请求.
       *  3.将业务处理之后的结果,为页面返回JSON数据.
       *  @ResponseBody作用: 将数据转化为JSON串
       */
      @RestController
      public class JDBCController {
          //${key} Spring提供的springel表达式 简称为:spel表达式
          //语法: 从spring容器内部获取key,动态为属性赋值.
          @Value("${mysql.username}")
          String username;    // = "root|";
          @Value("${mysql.password}")
          String password;    // = "root";
       
          @RequestMapping("/getMsg")
          public String getMsg() {
              return "你好数据库:" + username + password;
          }
      }

      3.2利用properties文件为属性赋值

      YML文件是SpringBoot的核心配置文件,一般主要用来整合其它第三方框架.属于系统配置文件.如果将大量的业务数据写到系统配置文件中. 耦合性高. 所以将业务数据最好放到pro文件中.

      配置 pro 文件

      #默认ISO-8859-1 中文必定乱码
      mysql.username2=mysql数据库
      mysql.password2=你猜猜

      为属性赋值

      package com.jt.contraller;
       
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.context.annotation.PropertySource;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
      /**
       * 说明:
       *  1.将该类交给Spring容器管理
       *  2.SpringMVC负责调用该对象接收用户的请求.
       *  3.将业务处理之后的结果,为页面返回JSON数据.
       *  @ResponseBody作用: 将数据转化为JSON串
       *
       *  propertySource:  value属性指定路径
       *                   encoding属性指定配置文件编码格式
       */
      @RestController
      @PropertySource(value="classpath:/mysql.properties",encoding = "UTF-8")
      public class JDBCContraller {
          /**
           * 难点: 如何将pro文件交给Spring容器管理????
           * 解决方案: @PropertySource("xxxxxx/xxx.properties") 指定配置文件交给Spring
           *          容器管理
           */
          @Value("${mysql.username2}")
          private String username2;
          @Value("${mysql.password2")
          private String password2;
       
          @RequestMapping("/getMsg2")
          public String getMsg2(){
       
              return "你好数据库:"+ username2 +password2;
          }
      }

      结构

      总结

      本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注自由互联的更多内容!

      【本文由:香港大带宽服务器提供】