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