![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring源码学习笔记心得
文章平均质量分 83
小小玉璞境Java工程师
这个作者很懒,什么都没留下…
展开
-
SpringAop获取代理对象的真实实例、代理类及所有切面
SpringAop获取代理对象的真实实例、代理类及所有切面获取一个代理实例的真实对象 /** * 获取一个代理实例的真实对象 * @param proxy * @return * @throws Exception */ public static Object getTarget(Object proxy) throws Exception { if (!AopUtils.isAopProxy(proxy)) {原创 2022-01-13 14:21:41 · 4546 阅读 · 0 评论 -
Spring AOP入口类的实例化
Spring AOP入口类的实例化入口类注册1.两注解只有其中一个1.1 @EnableTransactionManagement1.2 @EnableAspectJAutoProxy2. 两注解共存入口类注册@EnableTransactionManagementInfrastructureAdvisorAutoProxyCreator@EnableAspectJAutoProxyAnnotationAwareAspectJAutoProxyCreator1.两注解只有其中一个1.1 @E原创 2022-01-13 11:45:15 · 168 阅读 · 0 评论 -
以代码流程方式探索Spring源码(十一)--Bean的循环依赖与三级缓存
以代码流程方式探索Spring源码--Bean的循环依赖与三级缓存初始化Bean在什么时候添加三级缓存什么时候从缓存中取呢什么时候会存放到一级缓存呢瞧瞧那个匿名函数整理一下一个问题:为什么非要用三级缓存初始化Bean在什么时候添加三级缓存1、在createBeanInstance()创建Bean实例和applyMergedBeanDefinitionPostProcessors()注解收集之后2、在populateBean()属性赋值和initializeBean()实例化方法之前前置条件:earl原创 2021-03-18 17:30:14 · 163 阅读 · 0 评论 -
以代码流程方式探索Spring源码(十)--Bean实例化4--initializeBean--实例化及依赖注入后的初始化方法
以代码流程方式探索Spring源码--Bean实例化4--initializeBean--实例化及依赖注入后的初始化方法入口对普通Aware的调用Bean初始化前对BeanPostProcessor的一些调用正儿八经的初始化方法初始化后的BeanPostProcessor的一些调用入口在该方法中只要有三部分:1、各种Aware的调用2、各种初始化方法的调用3、各种BeanPostProcessor的调用对普通Aware的调用在这个地方主要对三种Aware接口进行对应的set方法调用。1、原创 2021-03-17 14:00:13 · 188 阅读 · 0 评论 -
从spring源码角度理解@PostConstruct和@PreDestroy注解是怎么工作的
从spring源码角度理解@PostConstruct和@PreDestroy注解是怎么工作的原创 2021-03-13 17:45:14 · 148 阅读 · 0 评论 -
以代码流程方式探索Spring源码(九)--Bean实例化3--populateBean--IOC和DI执行的地方
以代码流程方式探索Spring源码--Bean实例化3--populateBean--IOC和DI执行的地方入口:populateBean()对InstantiationAwareBeanPostProcessor的使用入口:populateBean()收集注解后,会对条件合适的bean进行三级缓存操作,这一步先跳过,与循环依赖一起研究。目前我们已经通过实例化方法创建了我们的bean实例,但是是一个裸实例,存在于堆内存,但是没有属性值,在populateBean方法中进行属性的填充,这个时候回发生DI原创 2021-03-06 16:05:37 · 150 阅读 · 1 评论 -
以代码流程方式探索Spring源码(八)--Bean实例化2--createBeanInstance与注解收集
以代码流程方式探索Spring源码--Bean实例化2入口:createBeanInstance()入口:createBeanInstance()instanceWrapper = createBeanInstance(beanName, mbd, args);在其中有四类:1、实例化factoryMethod方法对应的实例。2、实例化带有@Autowired注解的有参构造函数。3、实例化没有@Autowired注解的有参构造函数。4、实例化无参构造函数。...原创 2021-02-21 15:40:03 · 171 阅读 · 0 评论 -
以代码流程方式探索Spring源码(七)--Bean实例化1--getBean--createBean
以代码流程方式探索Spring源码--Bean实例化1入口:refresh()中的finishBeanFactoryInitialization(beanFactory);getBean():bean实例化的真正入口单例Bean的实例化createBean()准备进入内核了预知后事如何,且听下回分解入口:refresh()中的finishBeanFactoryInitialization(beanFactory);在此方法中,Spring完成了其初始化过程中的核心:Bean的实例化,在Bean实例化的过原创 2021-02-19 15:29:42 · 221 阅读 · 0 评论 -
以代码流程方式探索Spring源码(六)--初始化事件管理类及注册事件类
以代码流程方式探索Spring源码--初始化事件管理类及注册事件类初始化事件管理器initApplicationEventMulticaster()onRefresh()方法往事件管理类中注册事件类registerListeners()举个栗子Spring提供的五种标准事件补充一点入口还是在refresh()方法中初始化事件管理器initApplicationEventMulticaster()首先获取beanFactory实例,这里返回的就是DefaultListableBeanFactory实例原创 2021-02-13 23:09:55 · 140 阅读 · 0 评论 -
以代码流程方式探索Spring源码(五)--BeanPostProcessor接口类的实例化
以代码流程方式探索Spring源码--BeanPostProcessor接口类的实例化入口:refresh()方法中的registerBeanProcessors(beanFactory)根据类的类型获取实现了BeanPostProcessor接口的类遍历得到的这些类的名字,根据优先级进行分类存入不同的List先把实现了PriorityOrdered接口的类进行实例化注册把实现了Ordered接口的类进行实例化注册最后处理没有优先级别的BeanPostProcessor重复注册内部的BeanPostProc原创 2021-02-13 21:56:14 · 211 阅读 · 0 评论 -
以代码流程方式探索Spring源码(四)--BeadDefinitionRegistryPostProcessor和BeanFactoryPostProcessor的调用
以代码流程方式探索Spring源码--BeadDefinitionRegistryPostProcessor和BeanFactoryPostProcessor的调用BeanDefinitionRegistryPostProcessor是做啥的Spring在初始化的过程中是怎么做的?1、把beanFactoryPostProcessors里面的处理类进行分类2、获取实现了BeanDefinitionRegistryPostProcessor接口的所有类的BeanDefinition对象的beanName3、先原创 2021-02-12 21:50:16 · 193 阅读 · 0 评论 -
Spring源码解析默认BeanDefinition标签时的lookup-method标签和replaced-method标签的使用
Spring源码解析默认BeanDefinition标签时的lookup-method标签和replaced-method标签的使用lookup-method标签的使用replaced-method标签的使用lookup-method标签的使用首先有一个接口People类,它有一个展示性别的方法:它有一个子类Women类实现了此接口,并对showsex()方法进行了重写:额外的有一个service类来做业务方法:可以看到在此类中有一个展示性别的showsex()方法,但是它其中真正的实现是使原创 2021-02-09 21:33:57 · 163 阅读 · 0 评论 -
以代码流程方式探索Spring源码(三)--自定义BeanDefiniton的解析
以代码流程方式探索Spring源码--默认BeanDefinition的解析自定义标签是什么样儿的根据当前解析标签element找到该标签对应的namespaceUri加载spring中所有的jar包中的spring.handlers文件,并建立映射关系。根据namespaceUri从映射关系中找到对应的实现了NamespaceHandler接口的类![在这里插入图片描述](https://img-blog.csdnimg.cn/2021020410373448.png#pic_center)调用对应类的i原创 2021-02-04 11:48:18 · 270 阅读 · 0 评论 -
以代码流程方式探索Spring源码(二)--默认BeanDefiniton的解析
以代码流程方式探索Spring源码--默认BeanDefinition的解析原创 2021-02-01 18:26:35 · 159 阅读 · 0 评论 -
以代码流程方式探索Spring源码(一)--BeanDefiniton解析的准备工作
以代码流程方式探索Spring源码--BeanDefinition的生成梦开始的地方传统手艺Spring容器的初始化一切从一个构造函数说起refresh()、refresh()、refresh()重要的方法说三遍1、obtainFreshBeanFactory()在这个方法中完成了beanFactory的新建和beanDefinition的生成。下面就对这个方法中的具体细节进行探索。2、loadBeanDefinitions(beanFactory);梦开始的地方这段时间在跟随Jack老师学习Sprin原创 2021-01-31 15:23:23 · 118 阅读 · 3 评论