一、学习路线

1582443286972

20220525103526.png

简介 详情
SpringBoot 的缓存支持 使用EhCache缓存;
使用Redis缓存;
SpringBoot 的安全管理 Spring Security简单入门;
使用Spring Session实现分布式会话管理
SpringBoot 的日志管理 默认日志配置;
整合Log4j实现日志管理;
使用AOP实现统一Web请求日志
SpringBoot 的监控管理 actuator模块解析;
SpringBoot 的其他内容 定时任务与异步调用;
邮件发送实现;
后台运行配置;

二、Spring

1、什么是Spring
  • Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。
2、Spring是如何简化开发的:

为了降低Java开发的复杂性,Spring采用了以下4种关键策略:

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

三、SpringBoot

(一)核心思想:

约定大于配置

(二)SpringBoot的主要优点

  • 为所有Spring开发者更快的入门
  • 开箱即用,提供各种默认配置来简化项目配置
  • 内嵌式容器简化web项目
  • 没有冗余代码生成和XML配置的要求

(三)微服务

  • 业务:
    • Service:userService:==》模块
    • springmvc,controller==》提供接口

1、微服务是一种架构风格,他要求我们在开发一个应用的时候,这个应用必须构建成一些列小服务的组合;可以通过http的方式互通。

2、单体应用架构:

所谓的单体应用架构(all in one)是指,我们将一个应用中的所有服务都封装在一个应用中,无论是ERP,CRM或是其他什么系统,你都把数据库访问,web访问,等等各个功能放到一个war包内: 这样做的好处:易于开发和测试;十分方便部署;当需要扩展时,只需要将war复制多份然后放到多个服务器上,再做个负载均衡就可以了。
3、单体应用架构的缺点:

哪怕我要修改一个非常小的地方,我都需要停掉整个服务,重新打包,部署这个应用war包。特别是对于一个大型应用,我们不可能把所有内容都放在一个应用里面,我们如何维护,如何分工合作都是问题;

(四)使用场景

1、Spring 再简化:SpringBoot - 打包成JAR包:内嵌tomcat;微服务架构

2、服务越来越多:SpringCloud :如何去整理这些服务,扩展一下这些服务出了问题该怎么处理

3、SpringBoot核心:自动装配(为什么能简化开发的答案)


四、yaml语法

# 普通Key value
name: ping

# 对象
student:
    name: ping
    age: 20

# 行内写法
student: {name: ping, age: 30}

# 数组
pets:
    - cat
    - dog
    - pig

# 行内写法
pets: [cat,dog,pig]

五、javaConfig 绑定配置文件的值

1、注解方式赋值
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;


@Component
public class Dog {
    @Value("per")
    private String name;
    @Value("3")
    private Integer age;


    public Dog() {}

    ... # getter 和 setter
}
2、 yaml方式赋值
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;



@Component
@ConfigurationProperties("dog")
public class Dog {
    private String name;
    private Integer age;



    public Dog() {
    }
    ...
}

application.yml 文件

dog:
  name: per
  age: 20

重点:

  • ConfigurationProperties作用:
    • 将配置文件中配置的每一个的属性的值,映射到这个组件中;
    • 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置绑定
    • 参数 prefix=“dog” : 将 配置文件的dog下面的所有属性一一对应(注意:名字一定要相同)
3、*.properties文件配置
import org.springframework.context.annotation.PropertySource;
@PropertySource("classpath:dog.properties")
public class Dog {
    # SPEL 表达式取出配置文件的值
    @Value("${name}")
    private String name;
    private Integer age;


    public Dog() {
    }
    ...
}

dog.properties

name=东方

注意:IDEA中这种方法如果不配置编码的话,会出现乱码。去设置 FileEncoding中设置一下编码问题就好了。

1582449022747

4、松散绑定
yml文件中的 last-name: 阿黄   对应  类中的 lastName
5、 JSR303数据校验

1582449133554

使用方式

import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;

@Validated
public class Dog {
    @Email     #按照上面的一系列注解进行使用
    private String name;
    private Integer age;

    public Dog() {}
    ...
}

六、配置文件位置

1582449188787

(一) 基础介绍

  • 1、file:指项目路径
  • 2、名字必须是 application.yml/properties
  • 3、classpath:类路径,一般是java/resources目录

(二)优先级

  • 按照从1到4优先级越来越低,也就是说:优先按照序号小的配置文件进行配置(有哪个使用哪个)
    

(三)多环境配置

1、properties文件

创建多个配置文件

  • application.properties
  • application-dev.properties
  • application-test.properties

然后在 application.properties中进行配置

 spring.profiles.active=dev
2、yaml文件
spring: 
  profiles:
    active: dev

server:
  port: 8080

---
server:
  port: 8081

spring:
  profiles: dev

---
server:
  port: 8082

spring:
  profiles: test

七、静态资源目录

1582449499071

1、优先级
resources>static>public
  • public: 一般放公共资源,大家都会访问的js
  • static:静态资源,一些图片等等
  • resouces:放一些上传的一些文件
  • 如果自定义资源目录,上面那些目录就都失效了(一般不会这么干)1582449582774
2、总结

1582449598914


八、RPC协议

1、本地方法调用

本地的A方法调用本地的B方法

2、概念:

是一种进程间通信方式,它是一种技术的思想,而不是规范。他允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或者函数,而不是用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

3、两个核心:通讯,序列化

4、序列化:方便数据的传输


九、注解学习

1、@PostConstruct和@PreDestroy

==被这两个注解修饰的方法可以保证在整个Servlet生命周期中只被执行一次即使Web容器在其内部多次实例化该方法所在的Bean==

  • @PostConstruct:用来修饰方法,标记在项目启动的时候执行这个方法,一般用来执行某些初始化操作,比如全局配置。@PostConstruct注解的方法会在构造函数之后执行,Servlet的==init()==方法之前执行
  • @PreDestory:当bean被Web容器管理的时候调用,一般用来释放bean所持有的的资源,@PreD额story注解方法会在Servlet的==init()==之前执行
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Configuration  //此类将被容器管理成Bean
public class MyConfiguration {
   public MyConfiguration() {
       System.out.println("构造方法被调用");
   }

   //构造器之后被执行
   @PostConstruct
   private void init() {
       System.out.println("PostConstruct注解方法被调用");
   }

   //bean死亡之前被执行
   @PreDestroy
   private void shutdown() {
       System.out.println("PreDestroy注解方法被调用");
   }
}
J2EE已在Java 9中弃用 @PostConstruct和@PreDestroy这两个注解 ,并计划在Java 11中将其删除。我们有什么更好的替代方法吗?当然有!如果在JAVA9之后使用这两个注解,请添加以下依赖 :
<dependency>
  <groupId>javax.annotation</groupId>
  <artifactId>javax.annotation-api</artifactId>
  <version>1.3.2</version>  
</dependcy>