
spring源码解析
文章平均质量分 89
码炫课堂-码哥
这个作者很懒,什么都没留下…
展开
-
Spring 5.x 源码之旅-82事务CGLIB动态代理的秘密四
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-19 16:14:22 · 1018 阅读 · 0 评论 -
Spring 5.x 源码之旅-81事务CGLIB动态代理的秘密三
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-19 09:51:35 · 1008 阅读 · 0 评论 -
Spring 5.x 源码之旅-80事务CGLIB动态代理的秘密二
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-19 09:45:43 · 1057 阅读 · 0 评论 -
Spring 5.x 源码之旅-79事务CGLIB动态代理的秘密一
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-19 09:42:44 · 1165 阅读 · 0 评论 -
Spring 5.x 源码之旅-78事务简单总结
事务的例子和原理基本都分析了,当然也有些没讲清楚,还是需要自己多熟悉,其实原理就是AOP的拦截,每个方法都会创建一个事务状态,事务状态描述了创建的事务是不是新事务,是不是有新连接,是不是新同步,这些属性会影响回滚和提交的逻辑。还有事务传播机制原理基本源码里有,主要是和NESTED,这两个和其他的搭配可以有不同的效果,具体还是要看你的业务需求的。具体的组合很多,我也试不完,但是知道里面的原理,调试下就可以明白了,比如你知道。原创 2024-03-18 19:21:48 · 804 阅读 · 0 评论 -
Spring 5.x 源码之旅-77事务细节分析六
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-18 19:19:25 · 401 阅读 · 0 评论 -
Spring 5.x 源码之旅-76事务细节分析五
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-18 19:16:35 · 697 阅读 · 0 评论 -
Spring 5.x 源码之旅-75事务细节分析四
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-18 15:37:54 · 786 阅读 · 0 评论 -
Spring 5.x 源码之旅-74事务细节分析三
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-18 15:34:54 · 1088 阅读 · 0 评论 -
Spring 5.x 源码之旅-73事务细节分析二
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-18 15:31:27 · 515 阅读 · 0 评论 -
Spring 5.x 源码之旅-72事务细节分析一
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-18 08:55:32 · 840 阅读 · 0 评论 -
Spring 5.x 源码之旅-71深入AOP事务原理八
其实这个跟处理回滚很像,先处理保存点,然后处理新事务,如果不是新事务不会真正提交,要等外层是新事务的才提交,最后根据条件执行数据清除,线程的私有资源解绑,重置连接自动提交,隔离级别,是否只读,释放连接,恢复挂起事务等。try {try {//提交前回调//提交完成前回调if (status.hasSavepoint()) {//有保存点//是否有全局回滚标记else if (status.isNewTransaction()) {//当前状态是新事务//真正的提交。原创 2024-03-18 08:52:30 · 634 阅读 · 0 评论 -
Spring 5.x 源码之旅-70深入AOP事务原理七
如果前面有事务被挂起了,现在就要恢复,其实就是把一些属性设置回去。//一堆属性和状态设置回去= null) {= null) {= null) {//如果有挂起同步器的话要设置线程私有变量的值为挂起事务的相关属性这里就是前面我说了,就算没有异常,但是提交的时候也可能会回滚,因为有内层事务可能会标记回滚。所以这里先判断是否状态是否需要本地回滚,也就是设置回滚标记为全局回滚,不会进行回滚,再判断是否需要全局回滚,就是真的执行回滚。但是这里如果是发现有全局回滚,还要进行提交,就会报异常。原创 2024-03-18 08:48:46 · 547 阅读 · 0 评论 -
Spring 5.x 源码之旅-69深入AOP事务原理六
看上去很像没多少东西,其实里面涉及好多呢,比如如果是新的事务同步状态的话,要把线程的同步状态清除了,如果是新事务的话,进行数据清除,线程的私有资源解绑,重置连接自动提交,隔离级别,是否只读,释放连接等。如果有挂起的事务,还要把这个事务给恢复,其实就是把属性设置回去。//线程同步状态清除if (status.isNewTransaction()) {//是新事务的话,进行数据清除,线程的私有资源解绑,重置连接自动提交,隔离级别,是否只读,释放连接等= null) {//有挂起的事务要恢复。原创 2024-03-17 16:01:55 · 451 阅读 · 0 评论 -
Spring 5.x 源码之旅-68深入AOP事务原理五
这个一般是false,除非是设置,才是true,表示是全局的回滚标记。首先会进行回滚前回调,然后判断是否设置了保存点,比如NESTED会设置,要先回滚到保存点。如果状态是新的事务,那就进行回滚,如果不是新的,就设置一个回滚标记,内部是设置连接持有器回滚标记。然后回滚完成回调,根据事务状态信息,完成后数据清除,和线程的私有资源解绑,重置连接自动提交,隔离级别,是否只读,释放连接,恢复挂起事务等try {//意外的回滚try {//回滚完成前回调//有保存点回滚到保存点。原创 2024-03-17 15:59:08 · 687 阅读 · 0 评论 -
Spring 5.x 源码之旅-67深入AOP事务原理四
设置各种线程私有变量的状态。都是当前事务相关的信息。事务管理器根据事务状态来处理回滚。@Override关键的就是,下次讲。原创 2024-03-17 15:56:44 · 763 阅读 · 0 评论 -
Spring 5.x 源码之旅-66深入AOP事务原理三
有些传播机制需要挂起当前事务,比如。首先会清除所有线程相关的同步状态,如果当前事务存在的话,就进行一些属性的清除,比如清空连接持有器,清空线程私有变量的同步状态,最后把当前事务清除的属性保存到一个里,以便于恢复的时候设置会去。@Nullabletry {= null) {//挂起的资源,连接持有器//当前事务名字//取消绑定//当前事务可读性//当前事务隔离级别//当前事务激活状态throw ex;= null) {else {其实就是保存了挂起事务的信息啦。原创 2024-03-17 11:05:52 · 652 阅读 · 0 评论 -
Spring 5.x 源码之旅-65深入AOP事务原理二
/获取事务//如果当前存在事务//处理存在的传播情况// 检查超时if (def.getTimeout() < TransactionDefinition.TIMEOUT_DEFAULT) {//超时时间原创 2024-03-17 11:02:40 · 985 阅读 · 0 评论 -
Spring 5.x 源码之旅-64深入AOP事务原理一
首先会生成一个代理事务属性,然后进行事务的获取,主要还是分析事务注解上的属性来进行事务状态的创建,最后创建事务信息,将事务状态放入事务信息中。,然后获取方法的事务注解属性,如果缓存里没有,就会去解析方法上的事务注解,然后返回注解属性,然后获取事务管理器,也就是我们注入的。简单的一次事务就是这个样子,但是目标方法里面可能还有其他方法,也是有事务的,就涉及到事务的传播机制啦。,之后创建事务信息,这个最重要,是为了回滚和提交用的,最后调用目标方法。最后执行的是拦截器的方法,也就是事务拦截器。原创 2024-03-17 10:58:24 · 858 阅读 · 0 评论 -
Spring 5.x 源码之旅-63AOP事务实战四
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-17 10:53:38 · 654 阅读 · 0 评论 -
Spring 5.x 源码之旅-62AOP事务实战三
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-16 21:59:23 · 555 阅读 · 0 评论 -
Spring 5.x 源码之旅-61AOP事务实战二
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-16 21:55:27 · 641 阅读 · 0 评论 -
Spring 5.x 源码之旅-60AOP事务实战一
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-03-16 21:52:29 · 277 阅读 · 0 评论 -
Spring 5.x 源码之旅-59AOP事务的初始化流程二
前面已经被实例化了,现在要检测实例化之后的bean是否需要通知器,其实就是检测方法或者类上是否有事务注解。最终matches内部的是调用这个方法,首先会进行缓存的获取,因为类那么多,方法那么多,每次都解析一遍耗性能,所以进行了缓存,如果没有缓存就进行事务属性的获取,如果获取到就放入缓存并返回,否则就返回null。@Override@Nullable//先看缓存if (cached!= null) {//有缓存,不会每次computeTransactionAttribute。原创 2024-03-16 09:56:07 · 694 阅读 · 0 评论 -
Spring 5.x 源码之旅-57事务注解EnableTransactionManagement
默认是代理,这个后面会有看到,其实这个跟AOP注解的类似,也会。就是事务注解的一些属性,也用来解析事务注解属性。我们新来看下这个注解吧,可以看到他也有代理方式。这个类型前面讲过,解析到的时候会被实例化,加载。可以为特定的方法创建事务事件监听器,实现了。基本就这些东西,后面看他们是怎么作用的吧。的用处啦,默认是用代理,另外一个就是。主要是注册事务需要用的一些类,而且。里面存放事务注解的方法相关的属性。事务的方法拦截器,实现了方法拦截器。,这个就是后面创建那种类型的。,我们前面讲过,这个是可以。原创 2024-03-16 09:52:28 · 839 阅读 · 0 评论 -
Spring 5.x 源码之旅-59AOP事务的初始化流程一
随后进行实例化的时候,第一次调用的跟AOP。原创 2024-03-16 09:48:53 · 690 阅读 · 0 评论 -
Spring 5.x 源码之旅-49AOP通知方法执行顺序探究
先看下整体的基本通知方法的内部执行顺序结构:我们拿动态代理为例,也是类似,当调用某个方法的时候,会进行代理的执行:一堆,其实重要的就这么几句,首先获取所有通知然后封装成调用方法。我把AOP的一般方法都用上了,可以看到这里他已经是排序完的,具体怎么排序的,可以去研究下,比较复杂,其实就是为了形成一个调用栈顺序,后面我会画出来,我们先看这些用到的,第一个其实没什么具体用,他会直接执行第二个,然后顺序执行下去:主要是递归获取通知,然后执行。没做什么,主要是,也就是继续调用来进行递归调用。其实就原创 2024-03-15 09:37:07 · 696 阅读 · 0 评论 -
Spring 5.x 源码之旅-48AOP代理细节三JdkDynamicAopProxy和CglibAopProxy
代理了,接下去就看看哪些方法是怎么执行的吧。的基本用法,创建增强器,拦截器,设置父类等。这里说白了就是增加一些其他的接口。了解到这里就差不多知道是怎么生成。原创 2024-03-15 09:33:09 · 375 阅读 · 0 评论 -
Spring 5.x 源码之旅-46AOP代理细节一wrapIfNecessary
就是放入集合里,然后判断要不要包装,其实就是在循环依赖注入属性的时候如果有AOP代理的话,也会进行代理,然后返回。原创 2024-03-15 09:30:33 · 1143 阅读 · 0 评论 -
Spring 5.x 源码之旅-47AOP代理细节二createProxy
进行代理工厂的创建,然后判断是否需要设置,以便于后面决定是不是要进行JDK动态代理还是CGLIB的动态代理,然后把通知器advisors包装下,加入到代理工厂,获取代理对象。//给bean定义设置暴露属性// 创建代理工厂//复制配置信息// proxyTargetClass=false的话if (!原创 2024-03-14 14:09:03 · 966 阅读 · 0 评论 -
Spring 5.x 源码之旅-45Aspect注解解析二
遍历所有的AspectJ注解类型,寻找是否有该类的注解,有的话就封装成返回。>[] {@Nullable> clazz : ASPECTJ_ANNOTATION_CLASSES) {//遍历所有注解,找到就返回= null) {原创 2024-03-14 14:06:26 · 595 阅读 · 0 评论 -
Spring 5.x 源码之旅-44Aspect注解解析一
首先会调用来寻找是否有Advisor的bean定义。原创 2024-03-14 14:03:44 · 398 阅读 · 0 评论 -
Spring 5.x 源码之旅-43AOP之AnnotationAwareAspectJAutoProxyCreator
里面定义了一个切点,某个包以及子包下的所有类的所有方法,添加一个Before注解方法,打个log而已。其实就是下面定义的MyService类的show方法做增强。@Aspect@Component/*** 修饰符 返回类型(一定要有) 包名.类名.方法名(一定要有) 参数*//*** 在目标方法执行后*/我们要对show方法做增强。@Service@Override主要看bean的类型是不是内部的类型,比如这些是跟AOP相关的,所以不应该被处理。主要是看是否有。原创 2024-03-14 09:52:59 · 707 阅读 · 0 评论 -
Spring 5.x 源码之旅-42AOP之@EnableAspectJAutoProxy
的最后一行:就是调用的。原创 2024-03-14 09:50:12 · 964 阅读 · 0 评论 -
Spring 5.x 源码之旅-85Qualifier注解三
这个方法其实就是检查候选的bean定义里有没有相关Qualifier注解,先检查下bean定义有没有添加type类型的全限定类型和短类名的对象,如果没有的话就看有没有设置type类型的对象,还没有的话就检查bean定义的工厂方法上有没有这个type注解,我们这个刚好在这上面,再没有的话就从bean装饰的定义中找注解,最后为空的话就从bean定义的目标类上去找。如果存在的话,就获取他的属性和type限定注解上的属性做匹配。最后返回是否找到或者是否匹配上。Class原创 2024-03-14 09:46:30 · 415 阅读 · 0 评论 -
Spring 5.x 源码之旅-84Qualifier注解二
注解的,然后检查候选的bean定义中,也就是friend1的bean定义中是否有这个注解,这里就是。我们看看底层怎么做的,首先是属性注入开始,这些是要注入的元素信息。,只要注解是其中一个类型的,或者注解上包含他们两个之一的都算是。首先获取注解的类型,判断是不是。然后我们找到了两个朋友类型的。名字,准备检查是否符合。然后跳过很多步来到了。原创 2024-03-13 09:13:22 · 427 阅读 · 1 评论 -
Spring 5.x 源码之旅-83Qualifier注解一
我们来做给程序员选朋友的例子,有些人程序员希望朋友都是男的好,有些希望都是女,有些人希望男女都可以,所以我们要满足他们的要求。注解来修饰的注解,可以进行条件筛选。创建了两个朋友,一个男的,一个女的,还有一个程序员。注解了,上面不是还有定义男女两个注解嘛,我们用用看。如果是我,我要全女的,那怎么办呢,我该怎么跟。,这个可以做限定用,也就是一个条件规定。说让他把女的都给我呢,这个时候就可以用到。注解,这个注解可以用在注解上,是。有个朋友集合的属性,需要注入。,不然就报异常啦,意思说找不到。原创 2024-03-13 09:11:21 · 795 阅读 · 0 评论 -
Spring 5.x 源码之旅-56自动装配的秘密二
前面部分跟一样,滤出符合条件的set方法后面的关键在:内部又到这里来了:后面就是根据type来的,跟一样,代码就不贴了。但是这个有个主意点,就是isRequired肯定是false,所以找不到就返回而已,不会报错,不像Autowired注解,自动是Required的,找不到要报错的:然后多个匹配的情况也是一样的:如果是写方法最终其实都会调用set方法来进行赋值,当然如果是属性也是反射赋值啦:可以看到如果有的话都是同一个对象。原创 2024-03-13 09:07:51 · 848 阅读 · 0 评论 -
Spring 5.x 源码之旅-55自动装配的秘密一
所以常说的Autowired注解是先看类型再看名字,其实不太严谨,还有考虑优先级,而且名字也要跟类名对的上。我们以这个类其实就是获取set开头的方法名字,然后去找是否有这个名字的bean定义,如果有就直接获取,没有就没有了。原创 2024-03-12 16:49:17 · 1217 阅读 · 0 评论 -
Spring 5.x 源码之旅-54解析配置类加载bean定义过程四
遍历集合,处理,就是前面解析的那些配置类。如果是被import进来的就会进行处理。最后都是注册bean遍历所有bean注解的方法:这里以前讲过的就不多说了。这个具体可以看下的方法,里面涉及到解析xml,内部会用读取,然后用Document解析,最后注册bean定义,里面很复杂,有兴趣有时间的可以看下去。原创 2024-03-12 16:45:21 · 993 阅读 · 0 评论