springboot2

理解

bean

  • spring 容器中的对象。在Spring中,Bean的是一个非常广义的概念,是Spring管理的基本单位,Java对象、Java组件、数据源、Hibernate的SessionFactory、事务管理器都被当成Bean处理。

容器

  • 可以理解为是一个大工厂,管理bean 的生命周期。
  • 容器最基本的接口就是BeanFactory负责配置、创建、管理Bean。BeanFactory接口包含以下几个基本方法:
 Boolean containBean(String name):判断Spring容器是否包含id为name的Bean实例。
<T> getBean(Class<T> requiredTypr):获取Spring容器中属于requiredType类型的唯一的Bean实例。
Object getBean(String name):返回Sprin容器中id为name的Bean实例。
<T> T getBean(String name,Class requiredType):返回容器中id为name,并且类型为requiredType的Bean
Class <?> getType(String name):返回容器中指定Bean实例的类型。

上下文

  • BeanFactory有一个子接口ApplicationContext,称为上下文。可以对bean进行管理操作,允许容器通过应用程序上下文环境创建、获取、管理bean。
  • ApplicationContext常用的实现类
ClassPathXmlApplicationContext:可以加载类路径下的配置文件,要求配置文件必须在类路径之下。
FileSystemXmlApplicationContext:可以加载磁盘中任意路径下的配置文件,要求具有访问权限。
AnnotationConfigApplicationContext:用于读取注解创建容器。

自动配置

依赖管理

  • 最顶级(外层)父项目申明模块。
  • common项目引入springboot的父项目管理依赖版本、引入spring-boot-starter-*场景启动器,这些都是通用的。

容器功能

组件添加

@Configuration

  • 声明类为一个配置类,可以在此类中声明一个或多个 @Bean标注的方法。
  • 配置类本身也是一个组件。

@bean

  • 作用于方法,想在方法里面将第三方的类变成组件时使用。
  • 当要向容器中注入多个相同类型的组件时,可以利用name属性进行区分。

@Resource

  • 根据name取值时,会优先找注解name标明的组件,找不到找和组件名相同的。

@Component、@Controller、@Service、@Repository/@Mapper

@import

  • 写在任意一个组件上都行,组件名默认是类名。
  • importSelector:自定义返回@import标注的组件
    在这里插入图片描述

配置绑定

  • @ConfigurationProperties + @Component
  • @ConfigurationProperties + @EnableConfigurationProperties @EnableConfigurationProperties要写在配置类上才行
    在这里插入图片描述

@Conditional 条件装配

  • 满足指定的条件才进行组件注入。

@lmportResource

  • 引入原生的配置文件(xml)。

web开发

静态资源定制与自动化

  • 静态资源放在/static/public,/resources, /META-INF/resources下,访问 : 当前项目根路径/ + 静态资源名。
  • 改变静态资源路径:
resources:
  static-locations: [classpath:/haha/]
  • 加静态资源访问前缀
spring:
  mvc:
    static-path-pattern: /res/**

常用参数

  • @PathVariable 路径变量
  • @RequestBody 获取请求体[POST]
  • @RequestParam 获取请求参数
  • @RequestHeader 获取请求头
  • @CookieValue 获取Cookie值

拦截器

  • miaosha: TestInterceptor类。

文件上传

  • 代码
@PostMapping("/upload")
    public String upload(@RequestParam("email") String email,
                         @RequestParam("username") String username,
                         @RequestPart("headerImg") MultipartFile headerImg,
                         @RequestPart("photos") MultipartFile[] photos) throws IOException {
        log.info("上传的信息:email={},username={},headerImg={},photos={}",
                 email,username,headerImg.getSize(),photos.length);
        if(!headerImg.isEmpty()){
            //保存到文件服务器,OSS服务器
            String originalFilename = headerImg.getOriginalFilename();
            headerImg.transferTo(new File("H:\\cache\\"+originalFilename));
        }
        if(photos.length > 0){
            for (MultipartFile photo : photos) {
                if(!photo.isEmpty()){
                    String originalFilename = photo.getOriginalFilename();
                    photo.transferTo(new File("H:\\cache\\"+originalFilename));
                }
            }
        }
        return "main";
    }
  • 配置
spring.servlet.multipart.max-file-size=10MB   //单次上传单个文件最大大小限制
spring.servlet.multipart.max-request-size=100MB  //单次上传所有文件最大大小限制

springboot三大组件

servlet

  • 处理客户端请求的动态资源,当我们在浏览器中输入一个地址回车跳转后,请求就会被发送到Servlet上进行处理。
  • 生命周期:初始化:web服务器启动时或web服务器接收到请求时,初始化工作有init()方法负责执行完成;调用:从第一次到以后的多次访问,都是只调用doGet()或doPost()方法;销毁:停止服务器时调用destroy()方法,销毁实例。
  • 默认使用tomcat作为servlet容器。
  • 定制servlet容器:

filter

  • 一个请求到达servlet之前预处理用户请求,也可以在请求离开servlet时处理http响应。
  • 生命周期:启动服务器时加载过滤器的实例,并调用init()方法来初始化实例;每一次请求时都只调用方法doFilter()进行处理;停止服务器时调用destroy()方法,销毁实例。

listener

  • ApplicationListener:容器关闭,容器刷新,容器启动,容器停止。
  • ServletRequestListener:监听请求。
  • HttpSessionListener:监听 session 对象。
  • 自定义监听器:链接

定制化组件

  • 原理分析:场景starter - xxxxAutoConfiguration - 导入xxx组件 - 绑定xxxProperties – 绑定配置文件项。
  • 编写一个配置类实现 WebMvcConfigurer 即可定制化web功能;+ @Bean给容器中再扩展一些组件。常用的就拦截器、跨域配置。

三大核心功能

IOC(控制反转、依赖注入、自动装配这个机制的理解)

  • Spring自动管理依赖的对象,使用时不需要去创建依赖的对象(spring容器启动的时候,会把依赖、配置类或者xml文件配置好相应的类,spring会把你在配置文件中配置的类都初始化好,用的时候直接用就不用再去创建)。
  • IOC和工厂模式的区别:IOC是使用了反射机制来动态的生成对象,工厂模式的对象生成是提前在工厂类中定死的,IOC更加灵活。

AOP(面向切面)

  • 在不改变原有方法的基础上添加新功能,比如加操作日志、权限控制。
  • 用法:定义一个切面类,配置在哪个包下面的方法执行前保存一下操作日志。或者定义一个注解,在标有这个注解的方法执行前判断当前登录的人有没有权限访问。

MVC

链接

概念
  • 一种软件设计规范。它将数据业务处理、页面显示、请求接收分开。
  • Model(模型):提供要展示的数据,包含数据的处理,一般包含:Value Object(数据Dao) 和 服务层(行为Service)。
  • View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
    -Controller(控制器):相当于调度员,接收用户请求,委托给Model进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。
核心组件
  • 前端控制器:DispactherServlet 接收请求、响应结果,相当于转发器,它是SpringMVC框架最核心的组件,有了它就能减少其他组件之间的耦合度。(不需要程序员开发)根据配置的映射规则(根据请求的URL),找到对应的处理器。(不需要程序员开发)
  • 处理器映射器:HandlerMapping 根据配置的映射规则(根据请求的URL),找到对应的处理器。(不需要程序员开发)
    • 处理器:Handler (需要程序员手动开发)
  • 处理器适配器:HandlerAdapter 适配调用具体的处理器,并且执行处理器中处理请求的方法,执行完毕之后返回一个ModelAndView对象。
  • 视图解析器:ViewResolver 会根据传递过来的ModelAndView对象进行视图解析,根据视图解析名解析称真正的视图View。(不需要程序员开发)
  • 视图:View View是一个接口,它的实现类支持不同类型的视图。比如:JSP、freemarker、Thymeleaf等等
    在这里插入图片描述
    (1)当用户通过浏览器发起一个HTTP请求,请求直接到前端控制器DispatcherServlet;
    (2)前端控制器接收到请求以后调用处理器映射器HandlerMapping,处理器映射器根据请求的URL找到具体的Handler,并将它返回给前端控制器;
    (3)前端控制器调用处理器适配器HandlerAdapter去适配调用Handler;
    (4)处理器适配器会根据Handler去调用真正的处理器去处理请求,并且处理对应的业务逻辑;
    (5)当处理器处理完业务之后,会返回一个ModelAndView对象给处理器适配器,HandlerAdapter再将该对象返回给前端控制器;这里的Model是返回的数据对象,View是逻辑上的View。
    (6)前端控制器DispatcherServlet将返回的ModelAndView对象传给视图解析器ViewResolver进行解析,解析完成之后就会返回一个具体的视图View给前端控制器。(ViewResolver根据逻辑的View查找具体的View)
    (7)前端控制器DispatcherServlet将具体的视图进行渲染,渲染完成之后响应给用户(浏览器显示)。
SpringBoot和SpringMVC的区别
  • SpringBoot是一个脚手架,把很多东西自动化配置了,集成了大量常用的第三方配置(jdbc、tomcat等),让开发更方便。引入相应的依赖就可以用SpringMVC了

对spring的理解

日志

配置文件中配置

在这里插入图片描述

日志文件

logback.xml和logback-spring.xml的区别

在这里插入图片描述

  • logback-spring.xml支持根据不同的环境打印不同的日志:
    在这里插入图片描述
  • 参考:miaosha项目-LogTestController
  • 参考文章
    link

JUnit5单元测试

依赖

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

常用注解

  • @SpringBootTest:加上才能用容器里面的组件。
  • @Test:表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明
    任何属性,拓展的测试将会由jupiter提供额外测试
  • @Timeout:表示测试方法运行如果超过了指定时间将会返回错误
  • @DisplayName:为测试类或者测试方法设置展示名称,可以在视图窗口看到
  • @RepeatedTest :表示方法可重复执行,下方会有详细介绍
  • @ParameterizedTest:表示方法是参数化测试,下方会有详细介绍
  • @BeforeEach:表示在每个单元测试之前执行
  • @AfterEach:表示在每个单元测试之后执行
  • @BeforeAII:表示在所有单元测试之前执行
  • @AfterAII:表示在所有单元测试之后执行
  • @Tag:表示单元测试类别,类似于JUnit4中的@Categories
  • @Disabled:表示测试类或测试方法不执行,类似于JUnit4中的@lgnore
  • @ExtendWith:为测试类或测试方法提供扩展类引用

快速失败在这里插入图片描述

指标监控

配置文件切换

  • 默认配置文件application.yml任何时候都会加载。
  • 指定环境配置文件application-{env}.yml
  • 激活指定环境
    • 配置文件激活:spring.profiles.active=prod
    • 命令行激活:java -jar xxx.jar --spring.profiles.active=prod --person.name=haha(修改配置文件的任意值,命令行优先
  • Profile条件装配,同名配置项,profile配置优先。
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

外部化配置

在这里插入图片描述

自定义start

spring.factories文件

  • 当定义一个没有启动类的模块时,在本模块中spring.factories文件 + @import(@Configuration)把组件引入容器。

SpringBoot启动过程

  • 构造一个SpringApplication的实例,构造SpringApplication的时候会进行初始化的工作(初始化监听器、初始化环境配置、构造容器)。—自己写的简化版

tomcat

maxThreads(最大线程数)

  • 请求到达Web服务器会创建一个线程来处理该请求。
  • 默认200。

accepCount(最大等待数)

  • 能够接受的最大等待数,请求数达到最大线程数时,新的请求会放在等待队列中。
  • 默认100。

maxConnections(最大连接数)

  • 同一时间能够接受的最大连接数。
  • 要大于maxThreads+acceptCount。

线程数的经验值

  • 1核2g内存为200,线程数经验值200。
  • 4核8g内存,线程数经验值800。

高效配置案例

server:
  tomcat:
    uri-encoding: UTF-8
    #最大工作线程数,默认200, 4核8g内存,线程数经验值800
    #操作系统做线程之间的切换调度是有系统开销的,所以不是越多越好。
    max-threads: 1000
    # 等待队列长度,默认100
   accept-count: 1000
    max-connections: 20000
    # 最小工作空闲线程数,默认10, 适当增大一些,以便应对突然增长的访问量
   min-spare-threads: 100
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值