![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
文章平均质量分 63
w7sss
这个作者很懒,什么都没留下…
展开
-
回首Spring源码之声明式事务源码级详解(下篇)
在上篇中,详细分析了事务的执行过程,中间留了一些尾巴没讲:在一个内部事务中spring是如何处理外部事务的?事务同步管理器TransactionSynchronizationManager到底是何方神圣,它有哪些作用?当外层有了一个事务,内层需要根据传播行为决定应该怎样处理,下面进入源码:看一下如何挂起一个事务:ok,以上就是挂起一个事务的全部操作了。TransactionSynchronizationManager是事务同步管理器,用来为每个线程管理事务资源和事务同步对象Transaction原创 2022-06-16 15:11:27 · 461 阅读 · 0 评论 -
回首Spring源码之声明式事务源码级详解(中篇)
在上一篇介绍了@EnableTransactionManagement和@Transactional这两个注解,spring声明式事务的准备工作完成了,下面正式进入事务的执行流程。声明式事务本质是aop的一个环绕通知,也就是这个拦截器:TransactionInterceptor,来到TransactionInterceptor的invoke方法:这个方法有点长,稍微总结一下:TransactionAttribute txAttr = (tas != null ? tas.getTransactio原创 2022-06-16 13:53:56 · 244 阅读 · 2 评论 -
回首Spring源码之声明式事务源码级详解(上篇)
spring的声明式事务本质还是基于spring aop,只不过少去了解析切面的过程,核心为Transactional这个注解,本篇将基于spring源码详解声明式事务。首先来到Spring声明式事务入口注解EnableTransactionManagement,有了这个注解表明开启声明式事务功能。看一下这个注解:可以看到Import了TransactionManagementConfigurationSelector这个类,是一个ImportSelector,用来注册bean定义:这里会引入两原创 2022-06-14 20:34:20 · 325 阅读 · 0 评论 -
Spring进阶之Bean的自定义作用域(Scope)
前言原创 2022-04-10 10:58:57 · 895 阅读 · 0 评论 -
回首Spring源码之AOP:方法增强(责任链模式)
前言在上一篇介绍了spirng aop创建创建动态代理的过程,本片着重分析一下切面方法的执行过程。以JKD动态代理为例。方法增强(责任链模式)来到JDK的动态代理类JdkDynamicAopProxy,它是一个InvocationHandler,JKD动态代理基于InvocationHandler的invoke方法进行方法增强:public Object invoke(Object proxy, Method method, Object[] args) t...原创 2022-04-09 16:48:35 · 1716 阅读 · 1 评论 -
回首Spring源码之AOP:创建动态代理
前言之前在spring ioc的bean加载过程中也提到了,在bean的初始化后置处理中,AnnotationAwareAspectJAutoProxyCreator这个bean的后置处理器会为容器中的bean创建aop动态代理,我们首先回顾一下这处调用。创建动态代理//bean初始化后置调用public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) thr原创 2022-04-08 20:59:35 · 1780 阅读 · 0 评论 -
回首Spring源码之AOP:解析切面(aspect)
前言之前分析了spring容器创建bean的整个流程,其中涉及到了bean的后置处理器的几处调用,其中在bean的实例化前置调用中,aop会在此处解析aspect切面,我们先来回顾一下这个BeanPostProcessor。解析切面//bean后置处理器实例化前置处理Object bean = resolveBeforeInstantiation(beanName, mbdToUse);protected Object resolveBeforeInstantiation(String原创 2022-04-07 21:48:37 · 1809 阅读 · 0 评论 -
回首Spring源码之AOP:@EnableAspectJAutoProxy
前言AOP是spring的重点和难点,它的本质是用动态代理增强容器中bean的方法,本篇从基于注解的AOP开发方式开始分析。当你需要进行AOP切面编程时,首相要引入一个注解:@EnableAspectJAutoProxy。@EnableAspectJAutoProxy@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(AspectJAutoProxyRegistrar...原创 2022-04-07 10:58:46 · 1591 阅读 · 0 评论 -
回首Spring源码之IOC:Bean的创建(finishBeanFactoryInitialization)下篇
上篇讲到了doCreateBean,这是一个创建bean的核心方法。下面直接进入分析:protected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreationException { BeanWrapper instanceWrapper = null; if (mbd.isSingleton()) { ins...原创 2022-04-04 11:13:24 · 1529 阅读 · 0 评论 -
回首Spring源码之IOC:Bean的创建(finishBeanFactoryInitialization)上篇
前言紧接着上一篇,所有BeanFactoryPostProcessor完成了历史使命,原创 2022-04-04 11:11:14 · 1385 阅读 · 0 评论 -
回首Spring源码之IOC:解析配置类(ConfigurationClassPostProcessor)下篇
前言紧接着上篇,分析完了@ComonentScan这个注解的解析,接下来看spirng是怎么处理@Import和@Bean这两个注解的。我们知道@Import这个注解使用范围很广,支持多种形式。@Import and@Bean原创 2022-04-01 11:46:39 · 1721 阅读 · 0 评论 -
回首Spring源码之IOC:解析配置类(ConfigurationClassPostProcessor)上篇
前言在上一篇,分析了BeanFactoryPostProcessor加工bean工厂的流程,提到了一个很重要的类ConfigurationClassPostProcessor,它的作用是解析配置类,下面分析一下这个类的工作原理。ConfigurationClassPostProcessorConfigurationClassPostProcessor是一个BeanDefinitionRegistryPostProcessor,具有注册BeanDefinition的...原创 2022-03-31 21:16:36 · 1971 阅读 · 0 评论 -
回首Spring源码之IOC:bean工厂后置处理器(invokeBeanFactoryPostProcessors)
前言上一篇完成了Spring容器刷新的准备工作,接下来开始刷新容器,从invokeBeanFactoryPostProcessors这个方法开始,这里说下BeanFactoryPostProcessor,bean工厂后置处理器,这个类型的bean可以对容器中的BeanDefinition进行加工,也就是可以修改bean定义,是spring的扩展点之一;与之对应的是BeanPostProcessor,可以对bean进行加工,后续详解;提一下BeanDefinitionRegistryPos...原创 2022-03-30 16:42:39 · 2090 阅读 · 0 评论 -
回首Spring源码之IOC:prepareBeanFactory
前言上篇讲到了基于注解的容器AnnotationConfigApplicationContext的创建过程,紧接着就是容器的加载refresh,这是spring ioc的主流程,里面包含了多个阶段的逻辑,主要分析一下刷新容器的几个主要方法,本篇着重分析容器刷新前的准备工作prepareBeanFactory。prepareBeanFactory首先进入AbstractApplicationContext#refresh:public void refresh() throw...原创 2022-03-30 12:48:23 · 1915 阅读 · 0 评论 -
回首Spring源码之IOC:AnnotationConfigApplicationContext
前言Spring作为java web的一款开发框架已经演进了许多年,当初Spring也是笔者源码阅读的开端,故借以回首,更求精进。本篇源码基于Spring 5.x。现在开发者多以注解方式使用spring,spring的配置文件时代早成了过去时,所以本篇主要从基于配置文件的容器: AnnotationConfigApplicationContext开始分析。AnnotationConfigApplicationContext启动容器:public static void main(Str原创 2022-03-29 18:26:12 · 2149 阅读 · 0 评论