`

spring源码学习系列2.6-spring ioc原理-codes

阅读更多
web.xml
<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>



org.springframework.web.context.ContextLoaderListener  ---  ServletContextListener

web.xml
<context-param>
		<param-name>contextClass</param-name>
		<param-value>...</param-value>
	</context-param>
<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>...</param-value>
	</context-param>
<context-param>
		<param-name>contextInitializerClasses</param-name>
		<param-value>...</param-value>
	</context-param>



spring-web/org.springframework.web.context/
ContextLoader.properties


XmlWebApplicationContext        --- ApplicationContext

StandardServletEnvironment      --- ConfigurableEnvironment environment
MutablePropertySources

ApplicationContextInitializer


DefaultListableBeanFactory      --- DefaultListableBeanFactory beanFactory
implements BeanDefinitionRegistry
Map<String, BeanDefinition> beanDefinitionMap  


设置BeanExpressionResolver    StandardBeanExpressionResolver

添加PropertyEditorRegistrar   ResourceEditorRegistrar

添加BeanPostProcessor

解析BeanFactoryPostProcessor并执行

messageSource

applicationEventMulticaster

themeSource

ApplicationListener

由beanDefinition创建instance

LifecycleProcessor    DefaultLifecycleProcessor

Lifecycle 





#spring源码接口系列-PropertyEditroRegistry的使用(BeanWrapperImpl的设计)
1.ioc注册及调用
1.1 注册
AbstractApplicationContext#refresh

beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, getEnvironment()));

AbstractBeanFactory#propertyEditorRegistrars


1.2 调用
AbstractAutowireCapableBeanFactory#doCreateBean

AbstractAutowireCapableBeanFactory#createBeanInstance

AbstractAutowireCapableBeanFactory#instantiateBean
AbstractBeanFactory#initBeanWrapper

AbstractAutowireCapableBeanFactory#populateBean
AbstractAutowireCapableBeanFactory#applyPropertyValues
BeanWrapperImpl#convertForProperty
TypeConverterDelegate#convertIfNecessary


2.注解注册及调用
一直以为springmvc请求方法的自定义的类的属性设置也是通过PropertyEditorRegistry,走读代码发现其实通过转换器conversion实现的

但它们殊途同归,最终都会走到
BeanWrapperImpl#convertForProperty
TypeConverterDelegate#convertIfNecessary





#场景1-设计场景
https://www.cnblogs.com/bobzeng/articles/1877140.html
https://qq85609655.iteye.com/blog/1453816
ApplicationContext parent = loadParentContext(servletContext);

这个方法的用途主要是用来解决Spring共享环境的,即,如果我们有多个WAR包部署在同一个服务器上,而且这些WAR都共享某一套业务逻辑层。如何共享一套业务逻辑包配置而不要每个WAR都单独配置,这时我们就可能需要Spring的共享环境了。
分享到:
评论

相关推荐

    Spring5 框架 ---- IOC容器 ---- 代码

    Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.jar

    标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是Spring框架在运行时依赖的两个关键库,它们主要涉及到动态代理和对象创建的优化。 1. **CGLIB(Code Generation Library)**: ...

    Spring Ioc源码分析系列--@Autowired注解的实现原理.doc

    Spring Ioc源码分析系列--@Autowired注解的实现原理 @ Автоwired注解是 Spring Framework 中的一个重要组件,它提供了自动装配的功能,能够将 Bean 之间的依赖关系自动解析和注入。今天,我们将深入探讨 @...

    Spring Ioc源码分析系列--自动注入循环依赖的处理.doc

    Spring Ioc 源码分析系列--自动注入循环依赖的处理 本篇文章主要讲解了 Spring Ioc 源码分析系列中自动注入循环依赖的处理机制。循环依赖是 Spring 框架中一个经典的问题,也是面试中常被问到的问题。本篇文章将...

    spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar

    Spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar是两个至关重要的依赖库,它们在Spring框架的内部功能实现中扮演着重要角色。 首先,让我们来理解`spring-cglib-repack-3.2.6.jar`。CGLIB(Code ...

    spring源码spring-framework-4.3.2.RELEASE

    通过对Spring 4.3.2.RELEASE源码的深入研究,我们可以了解其设计理念,学习到如何优雅地管理依赖、实现面向切面编程,以及如何利用Spring构建高效、健壮的Web应用。同时,源码阅读也能帮助我们理解Spring如何与其他...

    Java-Spring-SpringIoC容器-SpringIoC的学习

    **Spring IoC容器的工作原理** Spring IoC容器通过读取XML配置文件或使用注解来管理对象的生命周期和依赖关系。它首先解析配置元数据,然后根据这些信息创建和组装对象。在XML配置中,`&lt;bean&gt;`标签用于定义一个Java...

    springIoc实现原理

    **Spring Ioc 实现原理详解** Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由...

    Spring----IOC实现

    Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)为核心,极大地简化了软件组件的管理。在这个名为“Spring---IOC实现”的项目中,我们将深入探讨Spring如何通过IoC实现对应用...

    Spring.net二----初探IOC容器.rar源代码

    在本教程中,我们将深入探讨Spring.NET中的重要组件——IOC(Inversion of Control,控制反转)容器,以及如何通过它来管理对象的生命周期和依赖关系。 IOC容器是Spring.NET的核心,它负责创建、配置和组装应用程序...

    Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程.doc

    Spring 框架系列(7)- Spring IOC 实现原理详解之 IOC 初始化流程 本文将详细解释 Spring 框架中的 IOC(Inversion of Control,控制反转)实现原理之 IOC 初始化流程。IOC 是一种软件设计模式,用于将软件系统中...

    spring源码分析(1-10)

    Spring 源代码分析系列涵盖了多个关键模块,包括事务处理、IoC容器、JDBC、MVC、AOP以及与Hibernate和Acegi安全框架的集成。以下是对这些知识点的详细阐述: 1. **Spring 事务处理**:Spring 提供了声明式事务管理...

    maven-spring-ioc

    **Spring IoC 框架详解** Spring框架是Java开发中的一个核心组件,它提供了许多功能,其中最重要的一项就是Inversion of Control(IoC),也称为Dependency Injection(DI)。IoC容器是Spring的核心,它负责管理...

    官方原版源码spring-framework-5.2.3.RELEASE.zip

    深入学习Spring源码,不仅能够帮助我们理解其工作原理,还能提升我们在实际项目中的问题排查能力。例如,当我们遇到Spring的依赖注入问题时,可以通过查看`BeanFactory`和`ApplicationContext`的相关源码来定位问题...

    官方源码 spring-framework-5.3.2.zip

    官方源码的发布意味着开发者可以直接查看和学习Spring的实现细节,这对于理解和定制框架非常有帮助。Spring有着庞大的社区和丰富的教程资源,使得开发者能够迅速解决问题和学习新技术。 综上所述,Spring ...

    01-Spring源码手写篇-手写IOC.md

    01-Spring源码手写篇-手写IOC.md

    spring-framework-1.0-with-dependencies.zip

    通过深入研究这个压缩包,开发者不仅可以了解Spring Framework的基础原理,还可以对比不同版本的演变,进一步理解软件开发的进化历程。同时,对于那些正在维护旧系统或者希望了解软件历史的开发者来说,这是一份宝贵...

    Spring-MVC+Spring-IOC+Spring-JdbcTemple

    标题“Spring-MVC+Spring-IOC+Spring-JdbcTemple”揭示了这个项目或教程是关于如何集成并使用Spring框架的三个核心模块:Spring MVC、Spring IOC(Inversion of Control,控制反转)以及Spring JDBC Template。...

    spring-framework-1.0-m1.zip源码

    总结,Spring框架1.0的源码解析有助于我们理解其设计思想和实现原理,这些基础知识对于理解后续版本的演进和掌握现代Spring框架至关重要。通过深入学习,我们可以更好地利用Spring的强大功能,提高软件开发的质量和...

    spring源码spring-framework-4.2.5.RELEASE

    4.2.5.RELEASE版本作为Spring发展的一个重要里程碑,包含了丰富的功能和改进,让我们一起深入探讨其源码,揭示其背后的原理与设计思想。 一、核心模块分析 1. **IoC(Inversion of Control)容器**:Spring的核心...

Global site tag (gtag.js) - Google Analytics