`

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的共享环境了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics