源码系列专题
文章平均质量分 92
涉及到一些技术源码的系列专题
知行-wts
这个作者很懒,什么都没留下…
展开
-
Spring源码深度解析:二十一、事务实现⑤ - 事务的提交
如果事务被设置了回滚标识,则不会提交,直接回滚如果事务中有保存点信息则不会提交事务操作。如果事务非新事务的时候也不会去执行提交事务操作。原创 2022-12-13 15:51:43 · 832 阅读 · 0 评论 -
Spring源码深度解析:二十、事务实现④ - 事务的回滚
我们下面来看看回滚的具体操作即即 中的方法// 执行回滚 processRollback(defStatus , false);} . . . . // 省略了日志打印 private void processRollback(DefaultTransactionStatus status , boolean unexpected) {try {try {原创 2022-12-13 15:35:52 · 802 阅读 · 0 评论 -
Spring源码深度解析:十九、事务实现③ - 事务的创建
的功能是根据需要创建事务。这里面考虑到嵌套事务的情况,并对事务的传播属性进行了相应的处理,最终处理后。返回的是一个的值,里面封装了事务的各种信息,供给后面的回滚或者提交使用。以上:内容部分参考《Spring源码深度解析》如有侵扰,联系删除。内容仅用于自我记录学习使用。如有错误,欢迎指正。原创 2022-12-13 15:11:24 · 402 阅读 · 0 评论 -
Spring源码深度解析:十八、事务实现② - ProxyTransactionManagementConfiguration
方法的实现在其父类中实现的// 获取事务属性,如果 public TransactionAttribute getTransactionAttribute(Method method , @Nullable Class原创 2022-12-13 14:10:16 · 864 阅读 · 0 评论 -
Spring源码深度解析:十七、事务实现① - AutoProxyRegistrar
文章目录:Spring源码深度解析:文章目录由于事务的源码和前篇的Aop源码逻辑很类似,所以本篇中某些内容不会展开去讲解,建议先阅读完全集目录中的Aop部分,再来阅读本文会更好理解。我们在Springboot 中开始事务管理很简单,使用注解即可。那么也就说明是我们分析的入口了。很明显了指向我们去看去看的实现。可以看到,间接实现了接口,这里简单提一下就是会根据返回的字符串数组(一般是类的全路径名) 通过反射加载该类并注册到容器中。所以我们这里必然来看一下方法了,的实现在其父类ImportSelector原创 2022-12-13 11:13:10 · 468 阅读 · 0 评论 -
Spring源码深度解析:十六、@Aspect方式的AOP下篇 - createProxy
/ 这里的入参 beanClass :当前BeanClass, // beanName : 当前BeanName // specificInterceptors : 中篇中寻找出来的 Advisor // targetSource : SingletonTargetSource 目标类是单例 拥有给定对象的TargetSource接口的实现。这是Spring AOP框架使用的TargetSource接口的默认实现。通常不需要在应用程序代码中创建此类的对象。原创 2022-12-12 21:51:04 · 639 阅读 · 0 评论 -
Spring源码深度解析:十五、@Aspect方式的AOP中篇 - getAdvicesAndAdvisorsForBean
方法的作用就是筛选出适用于当前bean的Advisor。简单来说就是两步挑选出所有的Advisor。在 其中 通过调用了来完成了对硬编码注入的Advisor的获取解析返回。随后通过方式解析了 Aop 注解方式动态封装的Advisor并保存。通过Advisor中的Pointcut筛选出适合当前bean的Advisor。以上:内容部分参考《Spring源码深度解析》如有侵扰,联系删除。内容仅用于自我记录学习使用。如有错误,欢迎指正。原创 2022-12-12 21:05:58 · 757 阅读 · 0 评论 -
Spring源码深度解析:十四、@Aspect方式的AOP上篇 - @EnableAspectJAutoProxy
Aop 即面向切面编程,而 Aspect 是Aop 思想的一种实现。并不是所有的AOP框架都相同,它们在连接点模型上可能有强弱之分,有些允许在字段修饰符级别的应用通知,有些只支持方法调用相关的连接点。需要注意的是 Spring 只支持方法级别的连接点。Spring 提供了4种类型的AOP支持基于代理的经典Spring Aop纯Pojo切面@Aspect注解驱动的切面注入式的Aspectj的切面。原创 2022-12-12 21:03:47 · 877 阅读 · 0 评论 -
Spring源码深度解析:十三、JdbcTemplate 的源码分析
考虑到存在事务的情况,如果当前线程存在事务,那么说明在当前线程中存在共用数据库连接(存在事务则说明不止一个sql 语句被执行,则会共用同一个数据库连接, 所以如果当前Sql执行完毕,不能立即关闭数据库连接,而是将引用次数减一),这种情况下直接使用。对于警告的处理方式并不是直接抛出异常,出现警告很可能会出现数据错误,但是并不一定会影响程序执行,所以这里用户可以自己设置处理警告的方式,如果默认是忽略警告,当出现警告时仅打印警告日志,不抛出异常。如有侵扰,联系删除。除此之外,还有另一种形式的更新,其思路都相同。原创 2022-12-12 13:50:33 · 981 阅读 · 0 评论 -
Spring源码深度解析:十二、后处理器 BeanPostProcessor
是 Spring提供给我们的一个非常重要的扩展接口,并且Spring内部的很多功能也是通过来完成的(目前看到最典型的就是的 注入)。日常使用中,我们一般编写一个类来实现或者接口,根据每个方法的调用时机,来完成响应的工作。下面介绍一下接口方法,这里通过接口来介绍。是的子接口,在基础上又扩展了三个方法。原创 2022-12-08 15:51:48 · 755 阅读 · 0 评论 -
Spring源码深度解析:十一、Spring的循环依赖
文章目录:Spring源码深度解析:文章目录这篇文章是接着 Spring源码深度解析:七、bean的加载① - doGetBean 的继续分析过程。循环依赖,其实就是循环引用,就是两个或者两个以上的 bean 互相引用对方,最终形成一个闭环,如 A 依赖 B,B 依赖 C,C 依赖 A。如下图所示:循环依赖,其实就是一个死循环的过程,在初始化 A 的时候发现引用了 B,这时就会去初始化 B,然后又发现 B 引用 C,跑去初始化 C,初始化 C 的时候发现引用了 A,则又会去初始化 A,依次循环永不退出,原创 2022-12-07 16:20:23 · 615 阅读 · 0 评论 -
Spring源码深度解析:十、bean的属性注入④ - populateBean
文章目录:Spring源码深度解析:文章目录这篇文章是接着 Spring源码深度解析:八、bean的获取② - getSingleton 的继续分析过程。Spring在 方法中,完成了bean的完整创建。而在上篇 Spring源码深度解析:九、bean的获取② - createBeanInstance 中,完成了Bean的创建,但是属性内容还没有注入,本文就是将bean的属性进行注入的过程。本文涉及部分 BeanPostProcessor 内容,如需详阅 :AbstractAutowireCapable原创 2022-12-06 15:56:47 · 643 阅读 · 1 评论 -
Spring源码深度解析:九、bean的获取③ - createBeanInstance
的流程图如下,让我们根据流程图一步一步的学习一下spring是如何创建bean的吧文章目录:Spring源码分析:文章目录这篇文章应该是接着 Spring源码深度解析:八、bean的获取② - getSingleton 的继续分析过程。本文主要是分析的方法是,功能是Spring 具体创建bean的过程。调用如下:根据方法名就知道,是创建bean的实例,也就注定了这个方法的不平凡。下面就来一步一步的剖析他。具体源码如下:我们可以看到:下面我们来解析代码。这部分的功能 : 若中设置了则使用 提供的bea原创 2022-11-24 16:49:09 · 718 阅读 · 0 评论 -
Spring源码深度解析:八、bean的获取② - getSingleton
上面可以看到,主要步骤还是在回调的方法中。那么我们来看看在bean加载过程中的做了什么。代码如下:兜了一大圈关键代码还是在方法里。接下来,我们就来仔细分析一下方法。// 1. 锁定class, 根据mdb和beanName解析出来class Class原创 2022-11-23 17:25:12 · 740 阅读 · 0 评论 -
Spring源码深度解析:六、ConfigurationClassPostProcessor
文章目录:Spring源码分析:文章目录是非常重要的一个 后处理器。 完成了 配置类的解析和保存以及注解、等注解的解析工作 。将所有需要注入的bean解析成保存到中。首先来讲解一下的结构图如下。可见接口实现了(的后处理器)(设置自己的优先级为最高) 和各种接口。在启动后,会通过来创建应用上下文,默认请情况下我们一般创建作为应用上下文。而在构造函数中会创建。而在构造函数中会调用 ,该方法将一些必要Bean(如、、等)注入到了容器中。我们这里重点看的是接口的两个方法:关于这两个方法的调用时机和作用,我原创 2022-11-22 16:33:15 · 742 阅读 · 0 评论 -
Spring源码深度解析:七、bean的加载① - doGetBean
getBean()方法是spring ioc的核心,阅读getBean()方法的源码也是理解spring容器工作原理所必须要做的事情!我们先来看一下getBean()方法,getBean()的具体实现逻辑在方法中。Spring源码分析:文章目录下面我们开始进入正题,进行的内容分析。这个方法是一切的核心(Bean的创建过程也是在这个方法中完成)。首先我们先来整体过一遍方法代码。后面将会对一些关键点进行详细解释。// 1. 提取出对应的beanName。原创 2022-11-22 16:33:35 · 877 阅读 · 0 评论 -
Spring源码深度解析:五、BeanFactoryPostProcessor的处理
Spring源码分析:文章目录本文分析的方法是AbstractApplicationContext#invokeBeanFactoryPostProcessors方法解析配置类(这里的配置类不仅仅局限于注解,还包括@Import、等注解),将解析到的需要注入到Spring容器中的bean的保存起来解析bean中的 需要自动注入的bean@Autowired和注解。原创 2022-11-02 00:01:37 · 1484 阅读 · 0 评论 -
Spring源码深度解析:四、Spring配置文件加载流程
接下来我们学习Spring配置文件加载流程,主要加载xml配置文件的属性值到当前工厂中,最重要的就是BeanDefinitionAbstractApplicationContext#obtainFreshBeanFactory()首先我们debug进入spring的刷新方法,接着进入子方法该方法先创建容器对象:,然后加载xml配置文件的属性值到当前工厂中,最重要的就是BeanDefinition。具体代码如下:AbstractApplicationContext#refreshBeanFactory()原创 2022-10-30 23:02:30 · 2606 阅读 · 0 评论 -
Spring源码深度解析:三、容器的刷新 - refresh()
实例化并调用所有注册的BeanFactoryPostProcessor Bean,并遵循显式顺序(如果给定的话)。必须在单例实例化之前调用。BeanFactory 作为Spring中容器功能的基础,用于存放所有已经加载的bean,为了保证程序的可扩展性,Spring针对BeanFactory做了大量的扩展,如PostProcessor。这一步的功能主要是激活各种。原创 2022-10-26 17:29:34 · 1608 阅读 · 1 评论 -
Spring源码深度解析:文章目录
文章目录:原创 2022-09-04 09:50:21 · 1440 阅读 · 0 评论 -
Spring源码深度解析:一、Spring整体架构和源码环境搭建
Spring Core:框架的最基础部分,提供 IoC 容器,对 bean 进行管理。Spring Context:继承BeanFactory,提供上下文信息,扩展出JNDI、EJB、电子邮件、国际化等功能。Spring DAO:提供了JDBC的抽象层,还提供了声明性事务管理方法。Spring ORM:提供了JPA、JDO、Hibernate、MyBatis 等ORM映射层.Spring AOP:集成了所有AOP功能。原创 2022-09-14 22:15:40 · 2513 阅读 · 1 评论 -
Spring源码深度解析:二、手写模拟Spring
文章目录:Spring源码深度解析:文章目录我们在学习Spring源码之前,我们先整体的了解一下Spring容器由哪些组成,主要是由于IOC和AOP构成。然后自己先模拟手写一下Spring容器的整体架构,这样通过简单地demo让我们更加通俗的理解一个Spring容器主要做了哪些事情。方便为我们后面学习Spring源码。1、创建两个包名创建启动类:com.wts.spring.WtsApplicationContext创建一个业务类和测试类:业务类:com.wts.service.UserServ原创 2022-10-12 13:23:49 · 1125 阅读 · 0 评论