Spring
文章平均质量分 83
Spring框架
一键破光阴
优秀的人不过是持之以恒地做好一件事罢了
展开
-
Spring框架开天辟地:如果让我设计Spring?
前前后后写了几篇Spring的源码分析,看着寥寥无几的阅读量,我意识到了自己写的不够好,虽然我的流程图、源码注释花了不少时间,可阅读量摆在那,就是不够好。思来想去,我决定再加一篇更加通俗、直观的文章:假如让我们来设计Spring框架,我们该怎么设计,我们会想到什么问题,又该如何解决这些问题。好的开始吧。让我们回到2008年7月11日的早晨。最近我们在项目开发中,遇到了如下的问题,感觉很繁琐,我想搞一个框架出来,方便日后的项目开发:项目中有很多服务类对象,对象间引用极其麻烦,都用单例模式的话,那原创 2021-12-17 16:41:20 · 556 阅读 · 0 评论 -
Spring Boot下@Valid和@Validated的区别【源码级】
Spring Boot项目里对于接口参数校验,可以使用javax.validation.constraints包下的注解来优雅的校验。比如参数长度、是否为null甚至可以使用正则表达式来校验参数格式,以及校验不通过返回的提示信息都可以通过注解进行配置,实在是方便的很。但是本人在开发中遇到了这么几个问题:某一次SpringBoot版本升级后,启动项目提示我没有·javax.validation·的依赖,一开始导入了javax.validation-validation-api仍旧不能启动,后来导入了hi原创 2021-11-17 17:08:38 · 844 阅读 · 0 评论 -
可以优雅地丢弃@DateTimeFormat和@JsonFormat吗?
YES当然可以想想看我们在项目中什么时候会用到这两个注解呢?Get请求传入java.util.Date、java.time.xxx类型参数,需要配上@DateTimeFormat来解析解析Post请求传入json时候,同样需要将上述两种时间属性上加@JsonFormat来反序列化返回对象里有java.util.Date需加@JsonFormat,配置好时区,不然时间会少8小时先看看平常我们是怎么使用这两个注解的@DateTimeFormat@GetMapping("test")原创 2021-10-19 14:11:03 · 525 阅读 · 0 评论 -
Spring源码(七)Spring 声明式事务
了解专栏完整的内容,请点击跳转:Spring Framework专栏导航页gitee注释版源码本文对应的流程图声明式事务完整流程事务Advisor解析事务注解匹配web开发离不开和关系型数据库打交道,最常见的就是MySQL。MySQL目前默认的存储引擎是innodb,他是支持事务的(解决多个数据库操作ACID),那Spring又是如何优雅的实现MySQL的事务呢?要想实现事务,无非就是在我们的方法内获取数据库连接,关闭事务自动提交,待方法执行完进行手动提交或异常时进行回滚。这一系列和业务无原创 2021-10-15 09:31:33 · 181 阅读 · 0 评论 -
Spring源码(六)Spring AOP
了解专栏完整的内容,请点击跳转:Spring Framework专栏导航页gitee注释版源码Aop就是面向切面编程,通过生成代理对象,将与业务代码无关的逻辑织入到代理对象中,减少了代码冗余,降低耦合度,极大地提高了开发的便利性。比如全局异常处理、日志记录等都可以通过Aop进行优雅的实现。Spring Aop的实现过程中,有三个重要的环节切面解析创建动态代理动态代理调用注解方式开启Aop@Target(ElementType.TYPE)@Retention(RetentionPo原创 2021-10-12 15:00:47 · 124 阅读 · 0 评论 -
Spring源码(五)Spring 事件监听器的两种注册方式
了解专栏完整的内容,请点击跳转:Spring Framework专栏导航页作为一款优先的框架,怎么能少得了监听器呢?虽然说现基于web开发的项目很少用到监听器(大多使用消息队列),但是有些时候又需要用到。以及我们想监听Spring容器的初始化相关事件时候,就可以用到Spring自带的的监听器实现方式。重要组件:事件多播器监听器思维导图两种监听器实现方式接口方式@Lazy@Componentpublic class ContextRefreshedInterfaceListener i原创 2021-09-30 12:16:00 · 806 阅读 · 0 评论 -
Spring源码(四)Spring Bean的循环依赖
了解专栏完整的内容,请点击跳转:Spring Framework专栏导航页上一篇文章我们了解了Spring Bean的生命周期,当时提到了Bean的循环依赖问题,本文就再次展开描述该问题,看Spring是如何解决循环依赖的。解决循环依赖流程图什么是循环依赖@Componentpublic class A { @Autowired private B b;}@Componentpublic class B { @Autowired private A a;}怎么解决原创 2021-09-29 13:45:32 · 133 阅读 · 0 评论 -
Spring源码(三)Spring Bean的生命周期
了解专栏完整的内容,请点击跳转:Spring Framework专栏导航页上一篇文章,我门已经了解了Spring容器初始化的过程。初始化过程中会将单例、非抽象的、非懒加载的Bean创建好并放进缓存中以供使用。Bean的生命周期也就是指创建、使用、销毁的全过程,下面就此展开。流程图点击查看Bean的生命周期大白话概述一下:我们知道对象(即Bean)的创建一般使用new或者反射的方式创建,Spring就是采用反射的方式来创建Bean。Spring Bean的创建包括了实例化、属性赋值、初始化原创 2021-09-29 11:53:10 · 140 阅读 · 0 评论 -
Spring源码(二)Spring容器初始化
了解完整的专栏内容,请点击跳转:Spring Framework专栏导航页为了阐述得简要些,以下几篇内容都侧重于介绍注解方式的Spring容器,XML方式的略过。什么是Spring容器微观来说这个容器就是存储bean的Map,宏观来说(一般来说)是指ApplicationContext或者Spring框架的概念。我们知道Spring是基于Ioc原理来管理我们的bean,让程序员解放双手,使对象的创建和使用不再犯难。所以,Spring在启动的时候,会把我们用注解标识的bean都创建好并存起来,这个原创 2021-09-28 15:09:23 · 537 阅读 · 0 评论 -
Spring Framework 5.3.x源码解读
从事Java工作的开发人员,肯定对Spring框架再熟悉不过了,但是要深究其原理,剖析源码的时候,却又令很多程序员望而却步,我就是这样被吓到的。但是嚒,为了研究高质量代码以提升自己技术水平,也为了大厂面试时候更游刃有余,就必须要阅读Spring的源码,接下来几篇博文从个人心得出发就如何阅读spring源码,深入分析Ioc、Aop、事务等核心模块来展开介绍Spring,希望对大家有所帮助,自己也正好对近期学习做个总结。传送站:Spring源码(一)怎么优雅地阅读Spring源码Spring源码(二)S原创 2021-09-27 16:58:14 · 528 阅读 · 0 评论 -
Spring Boot国际化参数校验踩坑
需求:Controller层接口参数入参时候,对参数进行规则校验,校验不通过的参数的提示语要能够支持国际化(不同语言显示不同结果)分析:可以使用Spring框架中的MessageSource和Validator进行优雅的整合并校验。...原创 2021-08-13 16:44:05 · 616 阅读 · 0 评论 -
spring项目接口请求次数限制
对于分布式的Java Web项目来说,分布式锁肯定是必不可少的工具。有了分布式锁,就能实现并发环境下接口逻辑的事务完整性(ACID)。分布式锁的原理及实现方式有很多,这里就不做过多赘述,简单描述之就是:单机环境可以使用synchronize或aqs的衍生类(ReentrantLock…)来对方法加锁,避免线程安全问题,但对于分布式环境下,每台服务器上的项目都跑在各自的JVM中,上述的锁就没有用了,必须要有一个全局的分布式锁来代替其功能。一般情况下可以使用redis、zookeeper来实现分布式锁,既原创 2021-08-03 13:42:11 · 1784 阅读 · 2 评论 -
Springboot整合Aspectj、Aspectj基本语法
我们知道AOP(面向切面编程)给开发人员带来了极大的便利性,特别是有强迫症的猿们,项目中出现一堆冗余且与实际业务无关的代码,看一次想撕一次。网上找不到比较全的相关文章,特此花时间整理下,方便你我他。下述实例源码传送门https://gitee.com/peterven/aoptest开箱即用核心依赖 <dependency> <groupId>org.springframework.boot</groupId> .原创 2021-06-08 11:00:31 · 1074 阅读 · 0 评论