SSM--SpringBoot补充

一.SpringBoot使用注意事项

1.1 pom.xml文件说明

1.parent标签的作用:
  <!--
        继承特点: 将父级内容进行引用.(简化)
        SpringBoot理解: SpringBoot是框架的框架
        问题:  jar包冲突问题严重,之后需要有人统一管理
              A.jar ~~~~ 5.1.jar
              B.jar ~~~~ 4.8.jar
        SpringBoot项目: 官网将大部分框架在内部进行了整合.
        并且制定了,统一的版本依赖信息.
        parent标签的作用: 定义当前SpringBoot所有依赖的版本号
    -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath/>
    </parent>

2.dependency标签作用

    <!--按需导入
        历史说明: 2010 原来SSM 需要手动的编辑大量的的配置文件
        思想: SpringBoot使用体现了"开箱即用"的思想
    -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <!--Springboot的启动器 在内部已经将整合的配置写好,实现拿来就用-->
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

3.build标签作用
<!--build标签
        springboot项目在打包部署发布时,需要依赖maven工具API
        如果不添加该插件,则直接影响项目发布
    -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.5.3</version>
            </plugin>
        </plugins>
    </build>

关于Build标签说明
如果没有build标签则项目打包之后不能正常执行.报错如下
在这里插入图片描述

4.Maven指令

1.clean 删除编译后的目录target.java文件源码 .jar包(xxx.class文件)
用法: 1.当可能出现编译问题时 使用clean
2.项目打包前
2.install 项目发布 将xxx.class文件 打包成为xxx.jar
jar包位置:1.target目录下
2.本地仓库中
target目录下:
在这里插入图片描述
本地仓库目录下:
在这里插入图片描述

5.java项目发布命令
1.进入jar包的根目录

在这里插入图片描述

2.前提:必须配置JDK

说明: 通过 java -version 检查JDK是否配置正常.
如果提示java不是内部命令 则环境变量配置一定有问题.
在这里插入图片描述
环境变量配置:
在这里插入图片描述

3.项目发布

命令:java -jar xxx.jar
在这里插入图片描述

6.项目关闭问题

如果项目发布成功之后,需要关闭. 则直接关闭dos命令窗口即可.
如果依然不能正常关闭.则杀死进程/或者重启计算机.
在这里插入图片描述
杀进程 taskkill /pid 15524 /f
右键结束进程项即可
在这里插入图片描述

7.关于dos命令窗口锁定问题

说明: 当通过dos命令 启动tomcat服务器时,可能由于误操作.锁定当前dos窗口
解决方案: 万能取消指令 ctrl + c

二.SpringBoot高级用法

2.1@Value注解

1 需求说明

有时需要动态的获取数据,不能直接写死在代码中, 如何处理???
在这里插入图片描述

2.编辑YML文件
#语法说明
## 语法1: 数据结构  key-value结构
## 语法2: 写法     key:(空格)value
## 语法3: yml文件  默认字符集是UTF-8编码 中文不乱码
## 语法4: yml文件  有层级效果  注意缩进
server:
  port: 8080

# SpringBoot启动时 默认加载yml文件
msg:
  hello: "今天下雨,记得带伞"
3 编辑HelloController
@RestController  //将该类交给Spring管理
public class HelloController {

    /**
     * 规则:
     *    1. 当Spring容器启动时,会加载YML配置文件.
     *       会将内部的key-value结构 加载到spring维护的内存空间中
     *    2. @Value功能,从spring容器中根据key 动态赋值
     *    3. springel表达式 简称:spel
     *
     * 使用场景:
     *      如果代码中需要给成员变量赋值时,一般采用动态赋值的方式.
     */
    @Value("${msg.hello}")
    private String msg;


    @RequestMapping("/hello")
    public String hello(){

        return msg;
    }
}

4 .页面效果展现

在这里插入图片描述

2.2关于元注解的说明

1.@Target(ElementType.TYPE) 该注解对类有效
3.@Retention(RetentionPolicy.RUNTIME) 该注解在运行期有效
2.@Documented生成源码时,是否动态生成注释文档
4.@Inherited 标识注解是否可以被继承

2.3@ComponentScan说明

说明:当springboot启动时,会实例化很多的对象,但是需要排除特定的类型
原因:
SprinGBoot内部兼容了很多的第三方框架,但是其中个别加入之后会影响整个代码流程,所以通过这样的方式将个别的类排除在外.

@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

2.4@SpringBootConfiguration注解说明

说明1:
关键词:配置文件/配置类 作用:整合第三方框架(配置)
@Configuration:该注解一般标识类文件,告知springBoot程序 这个类是用来整合第三方框架/配置的.
在这里插入图片描述

说明2:@SpringBootConfiguration修饰主启动类,说明主启动类也是一个配置类.
在这里插入图片描述
说明3: SpringBoot主启动类会扫描用户自己的配置类,并且实例化对象.
在这里插入图片描述

2.5@EnableAutoConfiguration注解说明

说明:自动化的配置如图所示
在这里插入图片描述

注解1:@AutoConfigurationPackage说明:
该注解表示自动配置的包扫描的路径
工作原理:该注解会动态的获取主启动类当前的包路径,之后开启包扫描的机制
知识点:以后代码都应该在主启动类的同包及子包中
注解2:@Import(AutoConfigurationImportSelector.class)
知识回顾:SpringBooT使用体现了“开箱即用”的思想,用户引入jar包之后,可以直接使用(少量配置)

思考:dependencies代表程序的依赖项(将其他的包加载到自己的项目中),只是加载不负责执行
流程说明(重点)
当SpringBoot的主启动执行时,内部会加载@Import(AutoConfigurationImportSelector.class),该注解的作用就是根据依赖信息,扫描加载进来的启动器,SpringBoot内部有n多个启动器,根据SpringBoot内部的配置信息,依次加载执行,当匹配了用户了启动器之后,程序负责实例化框架,如果匹配不到,跳过,继续向下执行,最终SpringBoot程序加载成功
在这里插入图片描述

2.6启动类注解结构图

在这里插入图片描述

2.7关于依赖考题

**问题1:**用户暂时不需要数据库的配置,问:能否先行添加数据源的启动项?
**答案:**不可以,因为启动项执行需要完整配置,数据源信息并未添加,导致报错
总结:
springboot项目中的依赖包尤其启动项,添加时慎重,如果需要添加启动器,则必须包装配置完整。否则程序启动必然失败!!!
在这里插入图片描述

三.SpringBoot高级用法

3.1 属性赋值

1@Value为属性赋值

YML配置信息

# SpringBoot启动时 默认加载yml文件
msg:
  hello: "今天下雨,记得带伞~~"

动态赋值:
在这里插入图片描述

3.2properties文件为属性赋值

1.业务说明

业务有时会需要动态赋值,如果将大量的业务数据写到yml文件中,导致代码混乱。最好的方式应该指定 properties文件 为业务赋值.

2.编辑properties文件
#语法:
#数据结构:   key=value
#注意事项:   不要添加""号 本身就是字符串.
#字符集编码:  写法采用utf-8,程序读取时采用ISO-8859-1
pro.msg=配置信息
2.3动态为属性赋值
package com.jt.controller;

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;

@RestController//将该类交给spring管理
//spring负责加载指定的配置文件
//如果注解中只有一个属性名称为value,则可以省略不写
@PropertySource(value = "classpath:/msg.properties",encoding = "utf-8")
public class Hello {
    /**
     * 加注解,规则:
     *      1.当Spring容器启动时,会加栽yml配置文件
     *          会将内部的key-value结构的  加载到spring维护的内存空间中
     *       2.@Value功能,从spring容器中提取key  动态赋值
     *       3.springel表达式  简称:spel
     *
     *使用场景:
     *  如果代码中需要给成员变量赋值时,一般采用动态的赋值方式
     *
     *
     *
     */
    @Value("${msg.hello}")
    private String msg;
    @Value("${pro.msg}")
    private String proMsg;

    @RequestMapping("hello")
    public String HelloSpringBoot(){
        return msg+"||"+proMsg;
    }
}

3.3环境切换

要求: 不管是几个环境,要求配置项都必须相同,值可以不同
语法:
1.使用—实现YML配置文件的分割
2.定义环境名称
3.定义默认环境名称

#指定默认的环境
spring:
  profiles:
    active: test
---

#关于YML配置文件说明
# 1.数据结构    key=value
# 2.数据类型    默认都是字符串 如果需要类型转化,则框架已经在内部完成
# 3.yml写法:   1.key: (空格)value  2.有层级结构 编辑时注意
# 4.字符集编码: 默认程序加载时都是UTF-8
#定义环境名称
spring:
  config:
    activate:
      on-profile: dev

server:
  port: 8080
  #项目发布的路径
  servlet:
    #  /缺省值  localhost:8080/jt/xxxx请求路径
    context-path: /

#2.为属性赋值  hello代表前缀    key=hello.msg
hello:
    msg: "我喜欢开发"

#环境分割线
---
spring:
  config:
    activate:
      on-profile: test

server:
  port: 8090
  #项目发布的路径
  servlet:
    #  /缺省值  localhost:8080/jt/xxxx请求路径
    context-path: /

#2.为属性赋值  hello代表前缀    key=hello.msg
hello:
  msg: "我喜欢测试"

3.4热部署

1.添加依赖
<!--支持热部署 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

2.3.2 配置IDEA环境
快捷键: ctrl + shift +alt + / 或者 ctrl + alt + a

在这里插入图片描述

3.5 Lombok插件安装

1 插件安装

在这里插入图片描述

2 添加jar包
		<!--引入插件lombok 自动的set/get/构造方法插件  -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

3.lombok作用

动态生成常见 get/set/toString等方法

//标准写法
//知识点: 为什么需要添加无参构造???
//       利用反射机制实例化对象时,默认调用无参构造
@Data //get/set/toString/equals/hashcode
@NoArgsConstructor //无参构造
@AllArgsConstructor//全参构造
@Accessors(chain = true)
public class User implements Serializable {
    private Integer id;
    private String name;

    //链式加载的底层原理 返回User对象
   /* public User setId(Integer id){
        this.id = id;
        return this;    //代表当前对象!!!!!
    }

    public User setName(String name){
        this.name = name;
        return this;
    }*/
}

4.lombok知识点

问题: lombok使用需要提前安装lombok插件!!, 如果项目发布在Linux系统中.问: 系统是否需要提前安装插件?

答案: 不要 因为lombok插件在编译期有效!!!

xxx.java文件编译为xxx.class文件.
知识衍生: 写的是java源码, 运行的是编译后的.class

3.6 SpringBoot测试类用法

1.业务说明

说明:有时由于业务需要,需要进行单元测试,单元测试中的对象可能会依赖spring容器
需求:需要Spring容器管理一个User对象,id=101 name =“好好学习”
分析:难点:定制化属性内容!!具体业务功能,利用配置类实现!!!

2.编辑配置类
//作用: 将自己需要的对象交给Spring容器管理
@Configuration  //标识这是一个配置类
public class UserConfig {

    /**
     * 知识点:1.Spring内部维护一个Map集合
     *       2. Map集合 key/value 分别是谁???
     *       3.IOC管理的对象的方式   1.@Controller等注解 2.@bean
     *  
     * 1.注解组合:  @Configuration +  @Bean
     * 2.什么是bean: 被spring管理的对象就是bean
     * 3.@Bean注解的作用
     *      将方法的返回值对象交给Spring管理
     * 4.Spring如何管理对象?
     *   数据结构: Map集合   Map<K,V>
     *   key:   对象的ID
     *   value: 实例化之后的对象
     * demo1: Spring如何管理对象
     *      key: 方法的名称
     *      value: 方法的返回值   Map<user,new User()>
     *
     * demo2:
     *      @Controller
     *      HelloController{}
     *      key: helloController   首字母小写
     *      value: spring通过反射创建的HelloController对象
     * @return
     */
    @Bean
    public User user(){

        return new User(101,"好好学习");
    }
}

3.根据对象类型进行注入

在这里插入图片描述

4.编辑测试类
package com.jt.test;

import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * 原理说明:
 *  1.当测试类执行时,会根据SpringBoot的配置,动态启动Spring容器.
 *  2.当spring容器启动时,会加载所有的注解和配置类,最终将所有的对象
 *  交给Spring容器管理  Map集合
 *  3.@SpringBootTest 通过这个注解,可以动态的从spring容器中
 *  获取对象
 *
 */
@SpringBootTest
public class TestSpring {

    /**
     * 注入方式:
     *      1. 根据类型注入 (默认规则)
     *      2. 根据名称注入   @Autowired
     *                      @Qualifier("user")
     */
    @Autowired
    //@Qualifier(value="user")
    private User user;

    @Test
    public void testUser(){
        System.out.println(user.toString());
    }
}

作业
新创建一个项目 demo2_mybatis 要求实现SpringBoot整合Mybatis
难点1. 引入jar包
难点2. 编辑YML配置文件 整合数据源 整合mybais
要求: 通过测试类 完成CURD操作 库和表使用之前项目的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望山。

谢谢您的打赏!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值