Spring源码分析
包括SpringBoot的启动,Spring IOC,SpringBoot内置Tomcat的启动
jy02268879
这个作者很懒,什么都没留下…
展开
-
【二十三】Spring Boot 源码分析之IOC初始化时加载Resource、解析出BeanDefinition、注册到容器中
一、IOC/DI简介Inversion of Control,控制反转。将对象的控制交给容器。Dependency Injection,依赖注入。将你需要依赖的对象直接给你注入进来。通俗的讲,把一个类看成一个Bean,Spring中有一个容器(ApplicationContext),用来装、创建、管理所有需要的Bean。不用自己去new一个对象了。容器会搞好对象,注入到程序中你要使...原创 2020-10-11 15:55:21 · 266 阅读 · 0 评论 -
【二十二】Spring filed上使用@AutoWired注解,依赖注入源码分析
一、简介不清楚实例化bean、填充属性、初始化bean的顺序、做的事、执行了哪些扩展器的请看我以前写的这篇【十八】Spring IOC 总结之getBean主流程和各个扩展点总结测试代码的注入方式是:直接在成员变量上用@AutoWired注解先说重点@Autowired在成员变量上的依赖注入是AutowiredAnnotationBeanPostProcessor来完成的AutowiredAnnotationBeanPostProcessor处理依赖注入的整个流程概况来说就是下面原创 2020-07-04 14:52:55 · 409 阅读 · 0 评论 -
【二十一】SpringBoot jar可执行原理
一、spring-boot-maven-plugin插件SpringBoot项目生成可执行jar包是在maven项目的pom文件中加入了一个插件<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-b原创 2020-06-28 22:00:18 · 271 阅读 · 0 评论 -
【二十】SpringIOCBeanFactory、FactoryBean、ApplicationContext、BeanFactoryPostProcessor、BeanPostProcessor区别
一、BeanFactory和ApplicationContext的区别1.BeanFacotry接口负责生产和管理bean的一个工厂。是Spring容器的顶层接口,提供了 IOC 容器应遵守的的最基本的接口它有多种实现:如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等但它是spring中比较原始的Factory无法支持spring的许多插件,如AOP功能、Web应用等。2.ApplicationCon..原创 2020-06-27 17:14:14 · 794 阅读 · 0 评论 -
【十九】Spring IOC 总结之启动时定位资源和BeanDefinition载入、解析、注册(SpringBoot 扫启动类所在包、starter、@Import)
源码调试以spring boot 1.5.8.release为例Spring IOC容器初始化主要有以下几个步骤1、资源定位:找到配置文件。2、BeanDefinition载入和解析3、BeanDefinition注册4、实例化bean和依赖注入 (不在本篇讨论范围,该内容总结请看【十八】Spring IOC 总结之getBean主流程和各个扩展点总结)而这一系列的操作种的前三步在SpringBoot中都是在AbstractApplicationContext#invokeBe.原创 2020-06-27 15:54:57 · 463 阅读 · 0 评论 -
【十八】Spring IOC 总结之getBean主流程和各个扩展点总结
一、getBean的流程简介Spring IOC主要分为两个大的部分,一部分是IOC容器的启动,另一部分是getBeangetBean的部分我盗个图图一来自https://juejin.im/post/5dec9fe76fb9a01608236cd31.简单的讲spring bean的声明周期1.实例化 Instantiation (上图中的createBeanInstance:利用构造方法等途径new出实例)2.属性赋值 Populate (上图中的populateBean.原创 2020-06-27 00:13:46 · 625 阅读 · 1 评论 -
【十七】Spring IOC 三级缓存解决循环依赖
一、spring ioc的三级缓存1.哪三级singletonObjects:第一级缓存,里面放置的是已经实例化好的单例对象;earlySingletonObjects:第二级缓存,里面存放的是提前曝光的单例对象,简单粗暴的说就是new了对象了,但是这个对象还没填充属性;singletonFactories:第三级缓存,里面存放的是将要被实例化的对象的对象工厂(存放 bean 工厂对象)。2.作用:spring ioc的三级缓存解决引用循环依赖,不解决构造方法注入的循环依赖,不解决非原创 2020-06-18 20:58:52 · 3910 阅读 · 1 评论 -
【十六】Spring源码分析之MVC------DispatcherServlet类的doDispatch(一次请求中SpringMVC主要做些什么事)
一次请求中SpringMVC主要做些什么事 getHandler,HandlerMapping通过URL查找handlergetHandlerAdapter, 通过handler查找匹配的HandlerAdaptermappedHandler.applyPreHandle, 调用前置拦截ha.handle, HandlerAdapter调用handler...原创 2020-06-16 22:46:50 · 323 阅读 · 0 评论 -
【十五】Spring源码分析之MVC------启动时AbstractHandlerMethodMapping维护url-handlerMethod的关系
源码调试基于springboot1.5.8.release一、SpringMVC请求处理流程引用spring in action上的一张图来说明了SpringMVC的核心组件和请求处理流程:①:DispatcherServlet是SpringMVC中的前端控制器(front controller),负责接收request并将request转发给对应的处理组件。②:HanlerMapping是SpringMVC中完成url到Controller映射的组件。DispatcherServlet接收原创 2020-06-16 20:21:14 · 283 阅读 · 0 评论 -
【十四】Spring源码分析之AOP----JdkDynamicAopProxy代理对象invoke调用
一、简介AOP源码分析主要分为5个篇章:前面4篇已经讲了1.注册、实例化、初始化AnnotationAwareAspectJAutoProxyCreator【十】Spring源码分析之AOP----注册、实例化、初始化AnnotationAwareAspectJAutoProxyCreator2.扫描容器中的切面,创建PointcutAdvisor对象【十一】Spring源码分...原创 2019-03-25 21:34:14 · 1102 阅读 · 0 评论 -
【十三】Spring源码分析之AOP----AbstractAutoProxyCreator生成代理对象
一、简介AOP源码分析主要分为5个篇章:前面3篇已经讲了1.注册、实例化、初始化AnnotationAwareAspectJAutoProxyCreator【十】Spring源码分析之AOP----注册、实例化、初始化AnnotationAwareAspectJAutoProxyCreator2.扫描容器中的切面,创建PointcutAdvisor对象【十一】Spring源码分...原创 2019-03-13 16:49:51 · 524 阅读 · 0 评论 -
【十二】Spring源码分析之AOP----匹配出作用于被代理类Advisor
一、简介:AOP源码分析主要分为5个篇章:前面2篇已经讲了1.注册、实例化、初始化AnnotationAwareAspectJAutoProxyCreator【十】Spring源码分析之AOP----注册、实例化、初始化AnnotationAwareAspectJAutoProxyCreator2.扫描容器中的切面,创建PointcutAdvisor对象【十一】Spring源码...原创 2019-03-12 20:36:16 · 1251 阅读 · 0 评论 -
【十一】Spring源码分析之AOP----AnnotationAwareAspectJAutoProxyCreator扫描@Aspect,创建Advisor
一、简介:AOP源码分析主要分为5个篇章:上一篇讲了注册、实例化、初始化AnnotationAwareAspectJAutoProxyCreator。1.注册、实例化、初始化AnnotationAwareAspectJAutoProxyCreator。【十】Spring源码分析之AOP----注册、实例化、初始化AnnotationAwareAspectJAutoProxyCrea...原创 2019-03-11 20:01:04 · 591 阅读 · 0 评论 -
【十】Spring源码分析之AOP----注册、实例化、初始化AnnotationAwareAspectJAutoProxyCreator
AOP源码分析主要分为5个篇章:1.注册、实例化、初始化AnnotationAwareAspectJAutoProxyCreator。 就是本篇。2.扫描容器中的切面,创建Advisor对象【十一】Spring源码分析之AOP----AnnotationAwareAspectJAutoProxyCreator扫描@Aspect,创建Advisor3. 目标bean和每个Advi...原创 2019-03-10 22:13:14 · 850 阅读 · 0 评论 -
【九】Spring源码分析之加载配置文件----ConfigFileApplicationListener的postProcessEnvironment方法
SpringBoot加载配置文件方法调用顺序图:源码: public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { // 添加属性源 addPropertySources(environment, appli...原创 2019-03-05 16:09:04 · 1294 阅读 · 0 评论 -
【八】Spring源码分析之扫描注册Bean----ConfigurationClassPostProcessor的processConfigBeanDefinitions方法
一、简介该后置处理器是扫描、解析、注册所有配置类的Bean入口扫描、解析、注册所有配置类bean的流程图:二、源码ConfigurationClassPostProcessor类processConfigBeanDefinitions方法public void processConfigBeanDefinitions(BeanDefinitionRegistry...原创 2019-03-04 19:07:09 · 2488 阅读 · 2 评论 -
【七】Spring源码分析之实例化Bean----AbstractAutowireCapableBeanFactory的createBean方法
一、简介所有 Bean 实例的创建都会委托给该方法实现。该方法其实只是做一些检查和验证工作,真正的初始化工作是由doCreateBean()实现二、源码分析AbstractAutowireCapableBeanFactory类的createBean方法源码:protected Object createBean(String beanName, RootBeanDefin...原创 2019-02-28 17:47:22 · 1867 阅读 · 0 评论 -
【五】Spring源码分析之实例化Bean----DefaultListableBeanFactory的preInstantiateSingletons方法
一、简介该方法最主要做的事是:把BeanDefinition注册表中的所有单例、非懒加载的bean全部实例化该方法的入口:二、源码分析DefaultListableBeanFactory类preInstantiateSingletons方法public void preInstantiateSingletons() throws BeansException { if...原创 2019-02-26 16:45:22 · 1735 阅读 · 0 评论 -
【三】Spring 源码分析之启动主流程---SpringApplication的prepareContext方法
该方法主要是为刷新spring容器做准备入口在SpringApplication类的run方法调用prepareContext方法,prepareContext(context, environment, listeners, applicationArguments,printedBanner);源码private void prepareContext(Configurab...原创 2019-02-22 18:19:14 · 1309 阅读 · 1 评论 -
【四】Spring源码分析之启动主流程---AbstractApplicationContext的refresh方法
入口:在SpringBoot启动的时候,SpringApplication的run方法中refreshContext(context);里面最终调用的是AbstractApplicationContext类的refresh方法来刷新容器源码:@Override public void refresh() throws BeansException, IllegalSta...原创 2019-02-22 15:35:30 · 2472 阅读 · 2 评论 -
【二】SpringBoot源码分析之启动主流程----SpringApplication的run方法
一、简介上一篇说了SpringApplication的创建,这一篇说run方法,关于IOC容器、BeanFactory、ServletContainer的创建和启动、Bean的注册和实例化都在run方法中。调试源码的时候注意:ApplicationContext为常说的Spring容器、IOC容器、应用上下文、Spring上下文。ApplicationContext中有BeanFa...原创 2019-02-22 14:56:12 · 1035 阅读 · 0 评论 -
【六】SpringBoot源码分析之启动内置Tomcat(Tomcat组件、生命周期简介、一次请求)
目录一、简介1.1Tomcat的主要组件1.1.1.Server:1.1.2.Sevice:1.1.3.Connector:1.1.4.Container:1.1.5.Component1.2Lifecycle生命周期1.2.1类图1.2.2 状态图1.2.3接口Lifecycle1.2.4LifecycleBase二、Spring Boo...原创 2019-02-11 14:55:56 · 1349 阅读 · 0 评论 -
【一】SpringBoot源码分析之启动主流程----SpringApplication初始化方法initialize
一、简介我会分成几篇来讲,这一篇只是SpringApplication的创建。debug调式SpringBoot 1.5.8的源码,运行在内置的tomcat上。Spring Boot 通过扫描classpath下的实例决定装载哪个web容器。我这里pom.xml文件用的spring-boot-starter-web所以,会启动tomcat来作为servlet的容器。 ...原创 2019-01-29 12:29:53 · 634 阅读 · 0 评论