Spring源码分析图
2019-08-05 10:25:44 7 举报
Spring核心原理分析图
作者其他创作
大纲/内容
返回AopProxy
loadBeanDefinitions
BeanDefinitionReaderUtils
DispatcherServlet
HandlerInterceptor
doDispatch
new DefaultListableBeanFactory
在web.xml文件中配置一个DispatcherServlet,作为SpringMVC的启动入口
render
DefaultListableBeanFactory
proceed
AbstractHandlerMapping
Core
invoke
SimpleInstantiationStrategy
getInterceptorsAndDynamicInterceptionAdvice
3
createBeanDefinition
Test
processDispatchResult
4
BeanWrapperImpl
依赖注入
Web
getHandler
p style=\
AOP流程图
XmlBeanDefinitionReader
postProcessXml
instantiateBean
init方法
AbstractApplicationContext
实例化Bean
getHandlerAdapter
Data Access/Integration
调用具体方法
createBeanFactory
refreshBeanFactory
cancelRefresh取消refresh()操作
initStrategy
postHandler
doLoadBeanDefinitions
getModelAndView
doService
配置一个请求路径的规则,通常会配置成/*
5
得到一个Bean
setConfigLocations()
RequestMappgingHandlerAdapter
getHandlerExecutionChain
getProxy
beanDefinitionMap
processBeanDefinitionElement
createProxy
定位配置文件,读取用简单的properties代替
调用阶段
AbstractAutowireCapableBeanFactory
1. createBeanInstance生成Bean所包含的Java实例对象
initWebApplicationContext
getBean
OXM
doRegisterBeanDefinitions
registerBeanDefinitions
Core Container
postProcessAfterInitialization
resolveValueIfNecessary
SpringMVC
ViewResolver
Instument
setValue
Beans
Messaging
BeanFactory:主语是Factory(顶层接口)。 用来创建工厂的模型,是所有Bean工厂要实现的接口。具体工厂会通过策略模式去实现,不同的工厂生产不同的产品。 主要方法是getBean(xxx)、getType(xxx)FactoryBean:主语是Bean。所有的工厂生产的产品都要实现这个接口。 简言之:BeanFactory生产出的产品都是FactoryBean。 主要方法是getObject()、getObjectType()大部分情况下BeanFactory本身也是通过BeanFactory创建的,也就是说BeanFactory也是一个FactoryBean。如果在beanName前面加了一个&,则表示是一个工厂,而且这个工厂是由BeanFactory创建出来的。&只是一个字符串,没有具体的含义。由Spring内部使用。
WebFlux
HttpServletBean
IoC初始化流程图(定位、加载、注册)span style=\"font-size: 13px; font-weight: normal;\
注册
preProcessXml
JDBC
HandlerMapping
Controller
initServletBean
触发通知
init
createBean
initializeBean
转换属性值,将引用转换为IOC容器中实例化对象引用
AbstractRefreshableApplicationContext
AbstractBeanFactory
BeanDefinitionValueResolver
wrapIfNecessary
1.寻找入口调用父类的构造函数,设置资源加载器2.获得配置路径将配置的Bean配置信息定位为Spring封装的Resource3.开始启动调用refresh()方法,对Bean配置资源进行载入。
BeanFactory
6
Transactions
配置阶段
AbstractBeanDefinitionReader
refresh()
preHandler
不考虑延时加载情况,直接赋值根据注解配置来赋值
applyBeanPostProcessorsAfterInitialization
IOC容器,BeanDefinition这里直接存原始Bean
BeanDefinitionParserDelegate
handler
BeanWrpper.setPropertyValues
WebMVC
配置servlet-pattern
2
onRefresh
WebSocket
doGetBean
AOP
AbstractXmlApplicationContext
创建代理对象
instantiate
web.xml
Context
1. Requset
parseBeanDefinitions
初始化阶段
Aspects
固定属性名字contextConfigLocation,指定application.xml路径通常会配置成classpath:application.xml
ModelAndView
registerBeanDefinition
ClassPathXmlApplicationContext
JMS
doCompare
View
2. populateBean将实例Bean对象封装
doCreateBean
Spring MVC流程图
Expression
BeanDefinition相当于保存在内存中的配置文件,保存了所有的跟类属性相关信息依赖注入就是把BeanDefinition中的信息读取出来,利用反射机制,或者代理机制创建对象。新创建的对象,不会放到我们印象中的IOC容器中,它存入到另外一个cache容器中。Wrapper是对原生对象的包装,通过构造方法存储原始对象,放入cache的只是Wrapper(包装器模式)。目的是减少代码侵入,能够在原生的基础上,再进行扩展(监听器,回调函数,标记信息),实现高可扩展。(面试题,Spring中的Bean是不是线程安全的?原来什么样就什么样,Spring不会对对象进行修改)getBean什么时候调用的?什么时候完成自动注入的?
DefaultBeanDefinitionDocumentReader
destroyBeans销毁已创建的Bean
findEligibleAdvisors
ORM
定位
applyPropertyValues
DI依赖注入流程图
3. initializeBean 开始AOP的流程
加载
请求处理阶段
开始跟配置文件扫描加载需要实例化的类,并且保存到IOC容器中
createAopProxy
AbstractNestablePropertyAccessor
配置init-param
AbstractPropertyAccessor
processBeanDefinitions
getAdvicesAndAdvisorsForBean
AbstractRefreshConfigApplicationContext
FramewokServlet
setPropertyValue
0 条评论
回复 删除
下一页