- 浏览: 50837 次
- 性别:
- 来自: 南京
文章分类
最新评论
web.xml
org.springframework.web.context.ContextLoaderListener --- ServletContextListener
web.xml
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的共享环境了。
<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的共享环境了。
发表评论
-
spring疑难解惑-循环依赖的解决
2020-06-17 23:27 554AbstractAutowireCapableBeanFact ... -
spring容器
2019-07-14 08:47 308private final ServletContainer ... -
spring容器
2019-07-13 23:35 0spring容器与springmvc容器 73 ... -
spring源码学习系列3.4-spring mvc原理-codes
2019-01-21 22:46 302本篇章从核心类角度解读springmvc的原理 web.xm ... -
spring源码学习系列4.2-spring aop原理-codes
2018-12-04 22:29 566jdk: Proxy InvocationHandler ... -
spring源码学习系列4.1-spring实现对ibatis的事务管理
2018-09-17 15:44 585事务由spring管理,可以理解为由spring管理数据库连接 ... -
spring源码学习系列4-3种常用的自动代理创建器
2018-09-02 15:48 5763种自动代理器是 AnnotationAwareAspectJ ... -
spring源码学习系列1.2-spring事务代理深入分析2
2018-05-27 19:46 457提示: BeanPostProcessor AopUtils ... -
spring源码学习系列2.5-ApplicationContext初始化-设计模式
2018-05-08 15:17 527ApplicationContext容器的初始化可以通过模板方 ... -
spring源码学习系列3.3-DispatcherServlet初始化-设计模式
2018-05-07 11:12 630springmvc的核心是DispatcherServlet ... -
封装spring-security
2018-01-23 19:33 523github地址: https://github.com/ne ... -
eclipse导入spring源码
2018-05-12 07:20 985spring在git上的项目时gradle管理jar包的,所以 ... -
spring源码学习系列3.2.3-异常页面拦截机制
2017-07-29 19:07 777前序:本文的意义在于了解 tomcat处理异常 请求访问 ... -
spring源码学习系列3.2.2-How to bind String to Date
2017-07-17 12:40 603springmvc开发中,经常需将界面日期数据(String) ... -
spring源码学习系列3.2.1-command对象的绑定
2017-05-28 12:00 994在<spring源码学习系列3.2-handlerAda ... -
spring源码学习系列3.2-handlerAdapter执行
2017-05-28 12:01 414DispatcherServlet#doDispatch中调用 ... -
spring源码学习系列3.1-handlerMapping初始化
2017-05-28 11:56 706SimpleUrlHandlerMapping的继承体系 or ... -
spring源码学习系列2.4-finishRefresh会做什么
2017-05-06 16:36 584spring容器初始化完成后,调用finishRresh 该 ... -
spring源码学习系列3-springmvc原理
2017-05-28 11:56 460问题: springmvc是如何控 ... -
spring源码学习系列2-容器初始化入口-refresh
2017-04-23 21:33 480context=XmlWebApplicationContex ...
相关推荐
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框架在运行时依赖的两个关键库,它们主要涉及到动态代理和对象创建的优化。 1. **CGLIB(Code Generation Library)**: ...
Spring Ioc源码分析系列--@Autowired注解的实现原理 @ Автоwired注解是 Spring Framework 中的一个重要组件,它提供了自动装配的功能,能够将 Bean 之间的依赖关系自动解析和注入。今天,我们将深入探讨 @...
Spring Ioc 源码分析系列--自动注入循环依赖的处理 本篇文章主要讲解了 Spring Ioc 源码分析系列中自动注入循环依赖的处理机制。循环依赖是 Spring 框架中一个经典的问题,也是面试中常被问到的问题。本篇文章将...
Spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar是两个至关重要的依赖库,它们在Spring框架的内部功能实现中扮演着重要角色。 首先,让我们来理解`spring-cglib-repack-3.2.6.jar`。CGLIB(Code ...
通过对Spring 4.3.2.RELEASE源码的深入研究,我们可以了解其设计理念,学习到如何优雅地管理依赖、实现面向切面编程,以及如何利用Spring构建高效、健壮的Web应用。同时,源码阅读也能帮助我们理解Spring如何与其他...
**Spring IoC容器的工作原理** Spring IoC容器通过读取XML配置文件或使用注解来管理对象的生命周期和依赖关系。它首先解析配置元数据,然后根据这些信息创建和组装对象。在XML配置中,`<bean>`标签用于定义一个Java...
**Spring Ioc 实现原理详解** Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由...
Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)为核心,极大地简化了软件组件的管理。在这个名为“Spring---IOC实现”的项目中,我们将深入探讨Spring如何通过IoC实现对应用...
在本教程中,我们将深入探讨Spring.NET中的重要组件——IOC(Inversion of Control,控制反转)容器,以及如何通过它来管理对象的生命周期和依赖关系。 IOC容器是Spring.NET的核心,它负责创建、配置和组装应用程序...
Spring 框架系列(7)- Spring IOC 实现原理详解之 IOC 初始化流程 本文将详细解释 Spring 框架中的 IOC(Inversion of Control,控制反转)实现原理之 IOC 初始化流程。IOC 是一种软件设计模式,用于将软件系统中...
Spring 源代码分析系列涵盖了多个关键模块,包括事务处理、IoC容器、JDBC、MVC、AOP以及与Hibernate和Acegi安全框架的集成。以下是对这些知识点的详细阐述: 1. **Spring 事务处理**:Spring 提供了声明式事务管理...
**Spring IoC 框架详解** Spring框架是Java开发中的一个核心组件,它提供了许多功能,其中最重要的一项就是Inversion of Control(IoC),也称为Dependency Injection(DI)。IoC容器是Spring的核心,它负责管理...
深入学习Spring源码,不仅能够帮助我们理解其工作原理,还能提升我们在实际项目中的问题排查能力。例如,当我们遇到Spring的依赖注入问题时,可以通过查看`BeanFactory`和`ApplicationContext`的相关源码来定位问题...
官方源码的发布意味着开发者可以直接查看和学习Spring的实现细节,这对于理解和定制框架非常有帮助。Spring有着庞大的社区和丰富的教程资源,使得开发者能够迅速解决问题和学习新技术。 综上所述,Spring ...
01-Spring源码手写篇-手写IOC.md
通过深入研究这个压缩包,开发者不仅可以了解Spring Framework的基础原理,还可以对比不同版本的演变,进一步理解软件开发的进化历程。同时,对于那些正在维护旧系统或者希望了解软件历史的开发者来说,这是一份宝贵...
标题“Spring-MVC+Spring-IOC+Spring-JdbcTemple”揭示了这个项目或教程是关于如何集成并使用Spring框架的三个核心模块:Spring MVC、Spring IOC(Inversion of Control,控制反转)以及Spring JDBC Template。...
总结,Spring框架1.0的源码解析有助于我们理解其设计思想和实现原理,这些基础知识对于理解后续版本的演进和掌握现代Spring框架至关重要。通过深入学习,我们可以更好地利用Spring的强大功能,提高软件开发的质量和...
4.2.5.RELEASE版本作为Spring发展的一个重要里程碑,包含了丰富的功能和改进,让我们一起深入探讨其源码,揭示其背后的原理与设计思想。 一、核心模块分析 1. **IoC(Inversion of Control)容器**:Spring的核心...