![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
文章平均质量分 60
qq_35175478
这个作者很懒,什么都没留下…
展开
-
14_spring事务具体执行逻辑
上次我们写了spring事务代理的过程并未说明事务怎么样提交、回滚、和挂起的。以及spring的事务传播行为是这怎么实现的,这篇文章来详细说明。之前如果存在事务的执行逻辑。原创 2024-04-25 16:29:30 · 148 阅读 · 0 评论 -
13_spring传播行为总结
传播行为下面我们一个一个来进行测试:代码:1、Propagation.REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中①外部无事务,内部使用Propagation.REQUIRED并报错外部方法保存成功,内部方法回滚②外部存在事务,内部使用Propagation.REQUIRED并报错外部方法保存回滚,内部方法回滚 。两者使用同一事务外部有事务,内部加入事务并且是同一事物。外部没有事务,内部就新建一个事务。如果当前没有事务,就以非事务方式执行,如原创 2024-04-24 19:53:40 · 716 阅读 · 0 评论 -
12_spring@Transactional失效的场景总结及原因
若事务方法的传播行为设置不当,如设置为Propagation.NOT_SUPPORTED、Propagation.NEVER或Propagation.SUPPORTS,可能会导致事务不生效或不期望的行为。由于Spring使用JDK动态代理或CGLIB代理来实现事务管理,如果方法被final修饰,代理对象无法覆盖这些方法,导致事务注解失效。Spring使用代理模式来实现事务管理,如果事务方法不是public,代理对象无法正确地拦截方法调用,从而导致事务注解失效。②服务类没有被 Spring 管理。原创 2024-04-24 14:39:38 · 319 阅读 · 0 评论 -
11_spring事务源码解析
@EnableTransactionManagement注解的具体实现。以及怎么使用aop来实现事务的。其实主要是后置处理器实现事务在什么时候执行。切面类实现事务增强的具体逻辑。原创 2024-04-21 17:00:27 · 867 阅读 · 0 评论 -
10_aop详细执行流程及通知的执行
之前介绍了aop的代理对象的生成,本次将从源码介绍方法执行时切面类的通知是怎么执行的。我们将使用后置通知来看方法的执行。其他通知同理。原创 2024-04-16 17:10:55 · 248 阅读 · 0 评论 -
09_浅谈BeanFactory和ApplicationContext的区别
ApplicationContext 是BeanFactory 的一个子接口,它扩展了BeanFactory 的功能,提供了更多的企业级功能。与BeanFactory 不同,ApplicationContext 在容器启动时就会预先实例化所有的Bean。ApplicationContext 会在启动容器是就将所有bean进行实例化和注入bean之间的关系。③性能: 由于 ApplicationContext 预先实例化所有的Bean,因此在启动时可能会有一些性能开销。①加载Bean的配置信息。原创 2024-04-10 11:09:33 · 584 阅读 · 1 评论 -
08_循环依赖中使用aop以及三级缓存使用
如果在实例化A之后就进行代理,这样违背了Spring设计的原则,Spring在设计之初就是通过AnnotationAwareAspectJAutoProxyCreator这个后置处理器来在Bean生命周期的最后一步来完成AOP代理,而不是在实例化后就立马进行AOP代理。在A的初始化后 AbstractAutoProxyCreator这个后置处理器中就不再进行A的代理,而是直接使用生成好的代理进行返回。从源码看,spring是在B填充属性A时,A的单例工厂进行了A实例的代理对象的生成。原创 2024-04-09 11:30:07 · 410 阅读 · 0 评论 -
07_spring对于单例bean的aop代理实现
当A、B两个类发生循环引用时,在A完成实例化后,就使用实例化后的对象去创建一个对象工厂,并添加到三级缓存中,如果A被AOP代理,那么通过这个工厂获取到的就是A代理后的对象,如果A没有被AOP代理,那么这个工厂获取到的就是A实例化的对象。当A进行属性注入时,会去创建B,同时B又依赖了A,所以创建B的同时又会去调用getBean(a)来获取需要的依赖,此时的getBean(a)会从缓存中获取,第一步,先获取到三级缓存中的工厂;当B创建完后,会将B再注入到A中,此时A再完成它的整个生命周期。至此,循环依赖结束!原创 2024-03-27 17:48:43 · 203 阅读 · 1 评论 -
06_spring源码循环依赖的解决方式
什么是循环依赖:简单来说就是在spring容器中A类引用B类,B类引用A类,从而引起循环调用。直接获取b实例 报错原因是 A类没办法进行set注入,那么不会再填充属性是进行实例化。如果B类中也是set注入则下面代码不会报错。原创 2024-03-27 15:05:42 · 404 阅读 · 0 评论 -
05_spring中bean的生命周期源码
initializeBean(beanName, exposedObject, mbd)方法。Bean 实例创建时序图。spring 核心源码。原创 2024-03-26 16:20:51 · 232 阅读 · 0 评论 -
04_根据代码浅入spring Bean的生命周期
user 实现 InitializingBean DisposableBean 和自定义 initMethod、destroyMethod。③实现BeanPostProcessor。原创 2024-03-26 10:52:41 · 356 阅读 · 0 评论 -
03_解析spring自定义标签BeanDefinition封装
执行NameSpaceHandler 的parse方法 实现类是 NamespaceHandlerSupport。调用BeanDefinitionParser的parse方法 子类就是NameSpacehandler中用到的类。解析自定义标签时调用BeanDefinitionParser接口的实现类。实现BeanDefinitionParser接口。类似于:mvc相关标签、aop相关标签。什么是spring自定义标签。原创 2024-03-22 17:47:12 · 135 阅读 · 1 评论 -
02_spring解析xml封装配置
Bean 实例创建时序图。原创 2024-03-22 14:28:52 · 213 阅读 · 1 评论 -
01_spring-framework源码环境搭建
1、下载spring-framework源码。5、build spring源码。2、下载gradle.zip。7、找一个test类成功启动。6、修改为idea执行。原创 2024-03-21 17:13:01 · 187 阅读 · 1 评论