- 博客(89)
- 收藏
- 关注
原创 springboot系列--拦截器加载原理
拦截器是在容器启动时,就创建并加载好,此时并未放入拦截器链中,只是放在一个拦截器集合当中,当一个请求进来之后,会通过匹配路径,查看是否有命中集合中的拦截器的拦截路径,如果命中,则放入拦截器链中,如果没有命中则不会放入。之后在执行请求之前,会循环遍历执行命中的拦截器中的逻辑,如果都通过,则执行请求,反之则不执行。
2024-12-10 22:25:03
906
6
原创 springboot系列--拦截器执行原理
二、请求日志记录三、性能监控 四、跨域处理 三、执行流程二、拦截器的实现与配置一、创建拦截器拦截器通过实现 接口来定义。该接口包含以下三个核心方法: 二、注册拦截器拦截器需要在配置类中注册,并指定拦截路径和排除路径。三、拦截器与过滤器的区别可以注册多个拦截器,Spring 会按注册顺序依次执行。在 方法中,任一拦截器返回 都会中断后续处理。执行顺序:三、动态拦截路径 拦截器的路径规则可以通过配置文件或数据库动态加载。
2024-11-24 21:58:02
1690
2
原创 springboot系列--web相关知识探索八
(1)、目标方法处理的过程中,所有数据都会被放在 ModelAndViewContainer 里面。包括数据和视图地址(2)、方法的参数是一个自定义类型对象(从请求参数中确定的),把他重新放在 ModelAndViewContainer(3)、任何目标方法执行完成以后都会返回 ModelAndView(数据和视图地址)。(4)、processDispatchResult 处理派发结果(页面改如何响应)进行页面渲染逻辑1、根据方法的String返回值得到 View 对象【定义了页面的渲染逻辑。
2024-11-20 22:47:22
741
原创 springboot系列--web相关知识探索七
根据客户端接收能力不同,返回不同媒体类型的数据。了解清除了MessageConverter原理后,可以通过自定义MessageConverter完成内容协商定制化。首先是在spring-boot-autoconfigure包下有一个类WebMvcAutoConfiguration,里面有一个静态内部类,实现了WebMvcConfigurer接口,在静态内部类里面有个方法将所有的消息转换器添加进了容器当中。});
2024-11-09 20:35:35
1069
原创 springboot系列--web相关知识探索六
浏览器默认会以请求头的方式告诉服务器他能接受什么样的内容类型,服务器最终根据自己自身的能力,决定服务器能生产出什么样内容类型的数据。/**T value:返回值数据内容:这里的数据已经绑定到了接口方法的返回值类型当中MethodParameter returnType:接口需要返回的数据类型,也即返回值类型例如这个接口value:就是Map里面的数据returnType:就是Map类型**/// 使用消息转换器进行写出操作// 返回值数据// 返回值数据的class对象,
2024-10-27 21:58:33
1139
原创 springboot系列--web相关知识探索五
测试用例中,访问接口进行传参,接口参数中的Pet对象,里面的属性是这样传递的。pet.name=xxx以及pet.age = 12.如果我们缓存pet = 小猫,12;其中小猫是name的值,12是age的值,这样springmvc就没法进行类型绑定,这是由于WebDataBinder 中的Converters没办法进行将请求参数与javabean进行类型绑定。所以需要我们自定义类型转换器。进行数据类型转换,然后绑定。// 类型转换函数表达式,S表示请求进来的参数,T表示转换成的目标参数。
2024-10-13 22:04:39
589
原创 springboot系列--web相关知识探索四
web相关知识探索三中研究了研究了请求中所带的参数是如何映射到接口参数中的,也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索三中主要研究了注解方式以及Servlet API方式。本次研究主要是复杂参数底层绑定原理。
2024-10-05 21:21:08
1021
1
原创 springboot系列--web相关知识探索三
web相关知识探索二中研究了请求是如何映射到具体接口(方法)中的,本次文章主要研究请求中所带的参数是如何映射到接口参数中的,也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。本次主要研究注解方式以及Servlet API方式。
2024-10-04 22:12:26
1373
1
原创 springboot系列--web相关知识探索二
指的是与请求处理方法关联的URL路径,通过在Spring MVC的控制器类(使用@RestController注解修饰的类)上使用注解(如)来指定请求映射路径,可以将不同的HTTP请求映射到相应的处理方法上。
2024-10-01 17:35:14
1124
2
原创 springboot系列--web相关知识探索一
springboot在底层自动帮我们配置好了mvc所需要的各个组件。当然,我们也可以自己定制化相关组件。其实就是把js、css这些东西,弄成了一个jar包,导入到项目中使用。比如:在pom文件中导入对应的jqery文件jar包,就可以在项目中使用。favicon.ico 放在静态资源目录下即可。以后访问每个页面都会显示这个图标spring:# mvc:# static-path-pattern: /res/** 这个会导致 Favicon 功能失效。
2024-09-17 21:44:10
1362
1
原创 springboot系列--yaml配置文件使用
1、yaml配置文件数据主要是以key:value的形式存在:和value之间存在空格2、yaml配置文件对大小写敏感3、使用缩进表示层级关系,缩进不允许使用tab,只允许空格4、缩进的空格数不重要,只要相同层级的元素左对齐即可5、'#'表示注释6、字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义(单引号)/不转义(双引号)7、文件的标准扩展名为.yaml,也可接受.yml扩展名。
2024-09-12 19:47:45
1045
原创 springboot系列--自动配置原理
1、SpringBoot启动时先加载META-INF/spring.factories下所有的自动配置类 xxxxxAutoConfiguration2、每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定3、生效的配置类就会给容器中装配很多组件4、只要容器中有这些组件,相当于这些功能就有了5、用户可以自己定制化配置,有两种方式:a、直接自己写配置类使用@Bean替换底层的组件。
2024-09-10 20:24:34
5176
原创 springboot系列--springboot前置知识
Home · spring-projects/spring-boot Wiki · GitHubJames Lewis and Martin Fowler (2014) 提出微服务完整概念。Microservices Guide
2024-08-25 11:57:23
1012
1
原创 Linux系列--shell编程一
Shell是一种用于与操作系统进行交互的命令行解释器。它是一种脚本语言,可以通过编写一系列的命令和脚本来执行操作系统的功能和任务。
2024-07-25 21:48:30
770
原创 Linux系列--用户、文件管理
Linux为了保证系统中每个文件的安全,引入了文件权限机制。针对于系统中的每一个文件Linux都可以提供精确的权限控制。它可以做到不同的用户对同一个文件具有不同的操作权利。读的权利(Read,简称r)写的权利(Write,简称w)执行的权利(eXecute,简称x)不同的用户文件拥有者(User,简称U):该文件的创建人同组用户(Group,简称G):和创建人在同一组的用户其他组用户(Other,简称O):和创建人不在同一组的用户这就是UGO模型。
2024-07-14 17:42:02
911
原创 Linux系列--命令详解
vi 和 vim 都是在 Linux 和 Unix 中常用的基于字符终端的文本编辑器。vi 是 Unix 早期提供的标准命令行下的文本编辑器,是一款非常强大、高效的编辑器,可以对文本进行快速修改和编辑,具有常见编辑器的基本功能。vim(Vi Improved)是在vi基础上进行了改进和扩展的一个版本,它保留了vi的全部功能,并添加了许多新功能,如基本的 GUI 界面、语法高亮、多级撤销/重做、对齐、插件支持等等。可以说 vim 是强大的文本编辑器之一,被众多的开发者、管理员、写作人员和爱好者使用。
2024-07-14 11:04:02
1125
原创 SaToken系列--指定token存储的数据源
浏览器在发送请求之前会先发送一个OPTIONS请求,来校验是否允许跨域访问,校验的结果存放在头信息的Access-Control-Allow-Origin,因此解决跨域也就是设置头部信息。当第一个请求通过了,才会真正的发送第二个请求,也即是请求接口获取数据。
2024-06-23 22:59:14
2193
原创 spring注解驱动系列-- spring容器创建原理
从源码开始探究spring容器的创建原理,下面是源码总步骤@Overridetry {throw ex;finally {
2024-06-15 21:12:27
847
原创 spring注解驱动系列--ApplicationListener研究
如果要自定义事件,必须继承Spring定义的接口ApplicationEvent。
2024-05-19 21:39:28
1010
1
原创 spring注解驱动系列-- BeanPostProcessor与BeanFactoryPostProcessor
bean后置处理器,bean创建对象初始化前后进行拦截工作的。
2024-04-21 22:29:00
1273
原创 spring注解驱动系列--AOP探究二
/ 如果增强器实现了MethodInterceptor,也就是是MethodInterceptor类型的直接加入// 如果是前置通知、返回通知、异常通知,则进入下面进行适配器转换成MethodInterceptor} else {一、@EnableAspectJAutoProxy 开启AOP功能二、@EnableAspectJAutoProxy 会给容器中注册一个组件 AnnotationAwareAspectJAutoProxyCreator。
2024-03-24 19:52:25
1294
原创 spring注解驱动系列--AOP探究一
在业务逻辑运行的时候将日志进行打印(方法之前、方法运行结束、方法出现异常,xxx)return i/j;切面类里面的方法需要动态感知MathCalculator.div运行到哪里然后执行;/*** 切面类* @Aspect: 告诉Spring当前类是一个切面类*/@Aspect//抽取公共的切入点表达式//1、本类引用//2、其他的切面引用//@Before在目标方法之前切入;切入点表达式(指定在哪个方法切入)
2024-03-17 18:46:13
1019
原创 spring注解驱动系列--自动装配
1、默认优先按照类型去容器中找对应的组件;2、如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找3、@Qualifier("bookDao"):使用@Qualifier指定需要装配的组件的id,而不是使用属性名4、自动装配默认一定要将属性赋值好,没有就会报错;可以使用@Autowired(required=false);5、@Primary:让Spring进行自动装配的时候,默认使用首选的bean;也可以继续使用@Qualifier指定需要装配的bean的名字。
2024-03-03 19:50:30
679
原创 spring注解驱动系列--Bean生命周期二
在bean生命周期中,当bean对象创建完了之后,会调用populateBean(beanName, mbd, instanceWrapper);给bean进行属性赋值,之后会调用initializeBean方法进行初始化,而BeanPostProcessor中的postProcessBeforeInitialization与postProcessAfterInitialization方法就是在initializeBean中执行的。给bean进行属性赋值执行自定义初始化。
2024-02-25 14:01:50
1112
原创 spring注解驱动系列--Bean生命周期一
二、通过让Bean实现InitializingBean(定义初始化逻辑),DisposableBean(定义销毁逻辑)三、可以使用JSR250: 1、@PostConstruct:在bean创建完成并且属性赋值完成;来执行初始化方法 2、@PreDestroy:在容器销毁bean之前通知我们进行清理工作七、初始化前后执行,BeanPostProcessor【interface】:bean的后置处理器: 在bean初始化前后进行一些处理工作; 1、postProcessBefore
2024-02-24 12:53:42
781
原创 spring注解驱动系列--组件注入
1、@Bean[导入的第三方包里面的组件]2、包扫描+组件标注注解(@ComponentScans/@ComponentScan + @Controller/@Service/@Repository/@Component)3、@Import[快速给容器中导入一个组件]4、使用Spring提供的 FactoryBean(工厂Bean)
2024-02-14 16:43:21
1257
1
原创 Java基础--泛型详解
Class 类名称 {private 泛型标识 变量名;interface 接口名称{泛型标识 方法名();..........类型通配符一般是使用“?”代替具体的类型实参,所以通配符是类型实参,而不是类型形参。
2023-10-06 16:51:33
803
原创 组件开发系列--Apache Commons Chain
Commons-chain是apache commons中的一个子项目,主要被使用在"责任链"的场景中,struts中action的调用过程,就是使用了"chain"框架做支撑.如果你的项目中,也有基于此种场景的需求,可以考虑使用它.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
2023-07-28 09:14:31
1242
原创 组件开发系列--<dependencyManagement>标签下依赖爆红问题
项目是通过父子模块分离的方式创建的,因此通过父模块进行版本管理无论如何切换下载源和配置文件都会出现not found的错误。
2023-07-24 16:40:19
452
原创 ES系列--文档处理
当我们使用 index API 更新文档 ,可以一次性读取原始文档,做我们的修改,然后重 新索引 整个文档。最近的索引请求将获胜:无论最后哪一个文档被索引,都将被唯一存 储在 Elasticsearch 中。如果其他人同时更改这个文档,他们的更改将丢失。很多时候这是没有问题的。或者对于我们的业务来说偶尔丢失更改并不是很严重的问题。但有时丢失了一个变更就是 非常严重的。比如:库存的扣减(虽然目前很多库存的扣减都是使用redis实现),如果丢失将会发生超卖的现象。
2023-07-18 10:13:44
1291
原创 ES系列--es进阶
一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者 从集群中移除节点时,集群将会重新平均分布所有的数据。当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更,例如增加、 删除索引,或者增加、删除节点等。而主节点并不需要涉及到文档级别的变更和搜索等操 作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。
2023-07-17 18:04:51
1387
原创 ES系列--打分机制
当你通过关键字搜索相关文档时,可能会出现多个文档,这些文档的顺序是通过一个max_score属性的大小从高到低顺序展现出来的,max_score属性就是我们所说的评分。而这个评分是通过一个文档打分机制计算出来的。
2023-07-17 09:26:18
2683
原创 ES系列--分析器
虽然 Elasticsearch 带有一些现成的分析器,然而在分析器上 Elasticsearch 真正的强大之 处在于,你可以通过在一个适合你的特定数据的设置之中组合字符过滤器、分词器、词汇单 元过滤器来创建自定义的分析器。一个 分析器 就是在一个包 里面组合了三种函数的一个包装器, 三种函数按照顺序被执行:1、字符过滤器:字符过滤器 用来 整理 一个尚未被分词的字符串。例如,如果我们的文本是 HTML 格 式的,它会包含像或者这样的 HTML 标签,这些标签是我们不想索引的。
2023-07-16 10:38:03
686
原创 ES系列--es初探
一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。进 行全文检索需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。建 立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。而这就是Elasticsearch存在的理由。The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。
2023-07-13 17:31:27
864
原创 Redis系列--数据过期清除策略&缓存淘汰策略
数据到达过期时间,不做处理。等下次访问该数据时,如果未过期,返回数据;发现已过期,删除,返回不存在。开启惰性删除:lazyfree-lazy-eviction=yes。
2023-06-28 19:04:06
5238
原创 Redis系列--布隆过滤器(Bloom Filter)
无论使用谷歌版本的布隆过滤器还是自己编写的,都会存在两个问题,1、因为不同元素经过hash函数计算后可能会出现相同的hash值(hash碰撞),就会出现一个误判率的问题2、因为有hash碰撞,导致同一个位置可能存放不同的数据,这对于删除操作是很不友好的。对于这些情况可查看另一种布隆过滤器,布谷鸟过滤器。
2023-06-16 18:09:11
7658
2
原创 Redis系列----redis网络模型2
Redis自身出道就是优秀,基于内存操作、数据结构简单、多路复用和非阻塞 I/O、避免了不必要的线程上下文切换等特性,在单线程的环境下依然很快;但对于大数据的 key 删除还是卡顿厉害,因此在 Redis 4.0 引入了多线程unlink key/flushall async 等命令,主要用于 Redis 数据的异步删除;而在 Redis6/7中引入了 I/O 多线程的读写,这样就可以更加高效的处理更多的任务了,Redis 只是将 I/O 读写变成了多线程,而。
2023-06-02 19:19:24
523
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人