随笔分类 -  spring源码解读

spring源码涉及到很多东西,不是一两篇文章可以说完的,编写的文章具体连贯性,需要根据文章序号从头到尾看,最少把源码下载下来,跟着文章一步一步揭开spring神秘面纱
摘要:上篇文章提到了AOP的入口,今天接着上篇文章来谈谈AOP,spring的AOP是一个BeanPostProcessor的应用。@Aspect注解切面的解析以下图为例 1.AbstractAutowireCapableBeanFactory类的initializeBean()方法 2.进入applyB 阅读全文
posted @ 2021-08-23 22:14 福福猿 阅读(109) 评论(0) 推荐(0)
摘要:上篇文章讲了IOC依赖注入,我们接着doCreateBean()方法中的代码往后看 1.进入doCreateBean()方法 2.进入initializeBean()方法 2.1进入invokeAwareMethod()方法 2.2进入applyBeanPostProcessorBeforeInit 阅读全文
posted @ 2021-08-22 21:50 福福猿 阅读(97) 评论(0) 推荐(0)
摘要:上篇文字讲了多种方式的实例化、注解的收集等,接着代码往后走 1.接着看AbstractAutowireCapableBeanFactory类的doCreateBean()方法 2.进入populateBean()方法 2.1进入AutowiredAnnotationBeanPostProcessor 阅读全文
posted @ 2021-08-22 20:43 福福猿 阅读(40) 评论(0) 推荐(0)
摘要:之前的spring容器加载核心方法refresh()方法中大部分方法都讲了,但是还有一个非常重要的方法没讲,Bean的实例化、依赖注入、AOP都是在这个方法中完成。 1.进入上下文的refresh()方法 2.进入finishBeanFactoryInitialization()方法 3.进入pre 阅读全文
posted @ 2021-08-22 00:03 福福猿 阅读(222) 评论(0) 推荐(0)
摘要:在Import注解的的收集中,如果Import导入的类是ImportBeanDefinitionRegistrar类型的,那么会放入一个容器中,最后会调用它的registerBeanDefinitons()方法。假设有这样一个需求,有个项目不是spring开发的,没有注解,现在想要把这个项目集成到我 阅读全文
posted @ 2021-08-16 21:06 福福猿 阅读(295) 评论(0) 推荐(0)
摘要:上篇文章提了下@ImportSource注解,这篇文章接着代码往后面走。 1.doPorcessConfigurationClass()方法 2.进入retrieveBeanMethodMatadata()方法 收集有@Bean注解 3.进入addBeanMethod()方法 放把beanMetho 阅读全文
posted @ 2021-08-16 19:55 福福猿 阅读(179) 评论(0) 推荐(0)
摘要:上篇文字讲了@Import注解,这篇文章接着代码往后走。 1.doProcessConfigurationClass()方法 2.进入addImportedResource()方法 除了@ComponentScan会把有@Component注解的类封装成BeanDefinition外,其他注解需要处 阅读全文
posted @ 2021-08-16 19:39 福福猿 阅读(207) 评论(0) 推荐(0)
摘要:上篇文章讲了@ComponentScan,今天接着代码往后走 1.doProcessConfigurationClass()方法 2.进入processImports()方法 2.1如果Import导入的类是一个ImportSelect类型且是DeferredImportSelect类型,进入han 阅读全文
posted @ 2021-08-15 18:18 福福猿 阅读(182) 评论(0) 推荐(0)
摘要:上篇文字讲了@PropertySource注解,接着往后面的代码看 1.doProcessConfigurationClass()方法 2.进入第一个parse()方法 这个方法和<context:coponent-scan>扫描器逻辑差不多,首先创建扫描器,然后获取@ComponentScan的值 阅读全文
posted @ 2021-08-15 15:47 福福猿 阅读(82) 评论(0) 推荐(0)
摘要:上篇文字讲了@Component注解,我们接着往后面的代码看,回到doProcessConfigurationClass()方法 1.doProcessConfigurationClass()方法 2.进入processPropertySource()方法 2.1进入resolveRequiredP 阅读全文
posted @ 2021-08-15 15:20 福福猿 阅读(143) 评论(0) 推荐(0)
摘要:1.ConfigurationClassPostProcessor类的postProcessorBeanDefinitionRegistry()方法 进入processConfigBeanDefinitions()方法 进入parse()方法 进入parse()方法,注意把metadata,bean 阅读全文
posted @ 2021-08-15 14:50 福福猿 阅读(294) 评论(0) 推荐(0)
摘要:上篇文章讲了ConfigurationClassPostPreocessor类生成BeanDefinition的时机、以及概括了它做的事,它是整个注解开发的支撑,今天来具体细品。 1.看ConfigurationClassPostPreocessor类的postProcessorBeanDefini 阅读全文
posted @ 2021-08-14 21:15 福福猿 阅读(140) 评论(0) 推荐(0)
摘要:前面的文章一些讲了xml解析、在xml中添加扫描组件就会把@Component类型注解的类封装成BeanDefinition,但现在xml文件的配置方法慢慢的退出了历史的舞台,大多都用注解开发,那么注解又是怎么完成对BeanDefinition的封装的呢?是通过ConfigurationClassP 阅读全文
posted @ 2021-08-14 17:31 福福猿 阅读(96) 评论(0) 推荐(0)
摘要:讲到这里,refresh()中核心方法就剩下finishBeanBactoryInitialization()方法没讲,这个方法主要是Bean的实例化、依赖注入、AOP,在讲这个方法之前我们讲一些其他的知道,如属性文件解析、如果没有配置文件,那么BeanDefinition怎么来的,Bean的实例化 阅读全文
posted @ 2021-08-14 14:47 福福猿 阅读(159) 评论(0) 推荐(0)
摘要:如果我们想要在spring容器加载完成时,做一些什么操作,就可以通过事件的监听来完成,由上篇文章知道spring在容器加载完成时会发布一个ContextRefreshedEvent事件,那么我们只要去监听 这个事件即可。 创建一个类实现ApplicationListener接口 测试 我们也可以自定 阅读全文
posted @ 2021-08-01 20:18 福福猿 阅读(68) 评论(0) 推荐(0)
摘要:前面讲了往事件管理类中注册事件,那么事件的监听什么时候被触发呢?在事件发布的时候,发布事件时会获取到事件管理类中所有的事件,去循环广播,然后调用事件监听类的onApplicationEvent()方法。在容器加载完成的时候,spring会发布一个ContextRefreshdEvent。 1.ref 阅读全文
posted @ 2021-08-01 19:49 福福猿 阅读(100) 评论(0) 推荐(0)
摘要:在refresh()方法中有一个registerListeners()方法,该方法主要完成往事件管理类中注册事件。 1.refresh()方法中的registerListeners()方法 2.进入registerListeneres()方法 阅读全文
posted @ 2021-08-01 16:55 福福猿 阅读(211) 评论(0) 推荐(0)
摘要:在spring容器加载核心方法refresh()方法中有一个initApplicationEventMulticaster()方法,该方法主要完成事件管理类的初始化,并加入一级缓存。 1.refresh()方法中的initApplicationEventMulticaster()方法 2.进入ini 阅读全文
posted @ 2021-08-01 16:52 福福猿 阅读(179) 评论(0) 推荐(0)
摘要:第5篇我们讲了invokeBeanFactoryPostProcessors()方法,我们接着spring容器加载refresh()核心方法往下走,今天来看registerBeanPostProcessor()方法 1.refresh()中的registerBeanPostProcessor()方法 阅读全文
posted @ 2021-08-01 16:18 福福猿 阅读(82) 评论(0) 推荐(0)
摘要:上篇文章讲了容器加载过程中会对实现了BeanDefinitionRegistyPostProcessor接口的调用,现在讲一下BeanDefinitionRegistyPostProcessor接口具体的应用,主要是对BeanDefinition的进行增删改操作。 1.创建一个类不加任何注解,也不在 阅读全文
posted @ 2021-08-01 16:08 福福猿 阅读(90) 评论(0) 推荐(0)