`

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 ...

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

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

    springIoc实现原理

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

    spring-demo10-注解-IOC.zip

    Spring框架充分利用了这一特性,提供了一系列注解来简化配置,使得我们可以避免使用XML配置文件。 在Spring中,最常见的注解有: 1. `@Component`:这是最基础的注解,用于标记一个类为Spring的bean。你可以将它...

    Spring----IOC实现

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

    完整Spring框架,包含源码文档等 spring-5.2.9.RELEASE-dist.zip

    它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了...

    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的核心,它负责管理...

    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-security-web源码所需jar包

    1. **spring-context-3.1.2.RELEASE.jar**:提供Spring的IoC(Inversion of Control)容器和AOP(Aspect Oriented Programming)支持,这是Spring框架的基础,为Spring Security提供了配置和事件处理能力。...

    spring源码spring-framework-4.2.5.RELEASE

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

    2023版全新SSM框架实战精讲 视频教程 下载下载 因为太大存百度云盘3.zip

    027-spring-ioc-三层架构组件管理介绍和jdbctemplate使用.mp4 028-spring-ioc-三层架构组件管理实战.mp4 029-spring-ioc-基于注解方式ioc配置.mp4 030-spring-ioc-扩展周期方法和作用域注解.mp4 031-spring-ioc-...

Global site tag (gtag.js) - Google Analytics