IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot部分总结 -> 正文阅读

[Java知识库]springboot部分总结

springboot

@configuration(proxyBeanMethod属性)是不是代理bean的方法,最佳方式为:配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断,配置类组件之间有依赖关系,方法会被调用得到之前实例之间用full模式

@import:在配置了可以被组件扫描类的类上可以加这个注解,用来导入某个对象并调用无参构造器创建对象

@conditional:条件加载对象进容器

@importResource: 导入xml资源文件进容器

@configurationProperties配置绑定:将yml文件里面的数据对象javabean,只有在容器中的组件才可以使用所以要将类加入容器才能使用,enableConfigurationProperties在主程序类上也可以进行属性配置绑定相当于把对象加进容器

@autoConfigurationPackage 直接注解利用registrar方法给容器中注册启动方法类下的一系列组件
@import利用selectImports方法在内部调用getAutoConfigurationEntry(AnnotationMetadata annotationMetadata)方法给容器中批量导入一些组件,而这些组件在List configurations = getCandidateConfigurations(annotationMetadata, attributes);这个方法中进行筛选,该方法使用spring的工厂加载器 SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),层层封装后加载得到所有组件其加载方式为获取META-INF/spring.factories位置来加载一个文件

默认全部加载但按需配置:
注解的作用只有标注,而围绕注解可以进行很多代理方编程,为注解赋予功能
xxxxCustomizer springboot自定义器修改springboot配置的默认行为

springboot默认访问资源路径下的/static /public /resources /META-INF/resources

静态映射原理:请求进来看controller是否能够处理不能则交给静态资源处理

? 匹配任何单字符

  • 匹配0或者任意数量的字符

** 匹配0或者更多的目录

springMVC功能的自动配置类webMVCAutoConfiguration

html中向springboot无法直接提交put delete请求需要进行嵌套提交,并且开启mvc.hiddenmethod.filter.enable=true,来实现restful风格

<form action="/hello" method="post">
    <input type="hidden" name="_method" value="PUT" >
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="submit">
</form>

rest原理:表单提交会带上_method=PUT 请求过来会被HiddenHttpMethodFilter拦截(该方法获取_method的值,并判断七请求是否正常,并且还是POST,原生request(post)包装模式requestWrapper重写了getMethod方法返回的是传入的值,过滤器链放行的时候用wrapper,以后的方法调用getMethod是调用requestWrapper的

springmvc功能的分析都是从servlet.dispatcherServlet里面的doDispatch方法进行

requestMappingHandlerMapping保存了所有@requestMapping和handler的映射规则,所有的请求映射都在handlerMapping中

路径变量里面的值可以通过 @pathVariable map<string,string> 方式全部获取

请求头里面的额所有制可以用@requestHeader map<string,string>方式全部获取

请求参数里面的值可以使用@requestParam map<string,string> 方式全部获取

参数处理原理:handlerMapping中找到能处理请求的Handler(当前handler被封装成了一个HandlerMethod),为当前handler找到一个适配器handlerAdaper(该解析器方法包括的多种例如:requestMappingHandlerAdapter,HandlerFunctionAdapter等),利用适配器将请求传进去,然后执行目标方法,

目标方法执行:
mv=ha.handle(processedRequest,response,mappedHandler.getHandler()), 进入到requestMappingHandlerAdapter类中执行方法,在方法执行过程中存在argumentResolvers:参数解析器(目标方法的值是什么是由参数解析器决定的)例如:requestParamMethodArgumentResolver,requestParamMapArgumentResolver等共26种,返回值处理器:有15种,确定支持返回值可以写什么(例如:modelAndView,等)invocableMethod.invokeAndHandle(webRequest,mavContainer)执行并处理

http传输时以文本格式传输,在java后台需要进行解析将string类型的格式转化为javabean

在需要其他格式提交用户信息时重写addFormatters()方法添加自定义格式转换器

/**
 * 开启lite模式,通过容器获取bean时将是多例的
 */
@Configuration(proxyBeanMethods = false)
public class WebConfig {
 @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addFormatters(FormatterRegistry registry) {
                /**
                 * 1. 在addFormatters 方法中,增加一个自定义的转换器
                 * 2. 增加自定义转换器 String -> Car
                 * 3. 增加的自定义转换器会注册到 converters 容器中
                 * 4. converters 底层结构是 ConcurrentHashMap 内置有124转换器
                 */
                registry.addConverter(new Converter<String, Car>() {
                   @Override
                    public Car convert(String content) {
                        if (!ObjectUtils.isEmpty(content)) {
                            String[] split = content.split(",");
                            String name = split[0];
                            double price = Double.parseDouble(split[1]);
                            return new Car(name, price);
                      }
                        return null;
                    }
                });
            }
        };
 }}

返回值处理器:

原理:1.返回值处理器判断是否支持这种类型的返回值supportsReturnType

2.返回值处理器调用handleReturnValue进行处理

3.resquestResponseBodyMethodProcessor可以处理返回值标记了@ResponseBody注解

1.利用messageConverters进行处理将数据转换为json

2.服务器最终根据自己的能力决定服务器能产生什么样内容的数据

3.spingMVC会挨个遍历所有容器的底层的httpMessageConvert看谁能处理

  • 得到mappingJackson2HttpMessageConverter可以将对象写为json
  • 利用mappingJackson2HttpMessageConverter将对象转化为json再写出去

内容协商:根据客户端接受能力不同,返回不同媒体类型的数据

视图处理原理中,目标方法的处理所有的数据都会被放在ModelAndViewContainer容器中包括数据和视图地址

方法的参数是一个自定义对象也会放在ModelAndViewContainer里面

processDispatchResult()处理派发结果(页面响应如何处理)

forward重定向到页面最原始的操作是response.sendRedirect(url)

拦截器:(handlerInterceptor)

  1. 根据当前请求找到handlerExecutionChain【可以处理请求的handler以及handler的所有拦截器】
  2. 先来顺序执行当前拦截器的preHandle方法
    1.如果拦截器prehandler返回flase则执行下一个拦截器的preHandle
    2.如果当前拦截器返回flase直接倒叙执行所有已经执行了的拦截器的afterCompletion
  3. 如果任何一个拦截器返回flase直接跳出不执行目标方法
  4. 所有拦截器都返回True执行目标方法
  5. 倒叙执行所有拦截器的postHandle方法
  6. 前面的步骤有任何异常都会直接触发afterCompletion
  7. 页面渲染完成后也会倒叙触发afterCompletion
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 01:51:23  更:2022-09-15 01:53:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:19:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码