spring源码分析总结
2020-03-26 21:07:52 举报
登录查看完整内容
相似推荐
查看更多
Spring源码分析
RocketMQ源码以及关键流程分析
Spring整合Mybatis源码流程
吐血总结ConfigurationClassPostProces源码解析
xxl-job源码分析
Spring源码分析
Spring事务源码分析
Spring 源码
Mybatis源码分析
Spring源码
spring源码分析总结,包括bean生命周期、ioc容器创建过程、aop、SpringMVC
作者其他创作
大纲/内容
2、注入启动类(register())。注册启动类(传入AnnotationConfigApplicationContext中的类)。
Spring bean生命周期
9、init()
AspectJAfterAdvice@After
controller实例
@Import
是否启用Cglib优化
2
否
9、国际化处理(LocaleResolver)
14、完成容器刷新。(finishRefresh())。如果用户没有配置lifecycleProcessor则注册默认的生命周期函数DefaultLifeCycleProcessor。并且执行生命周期的刷新方法onRefresh。然后发布容器刷新事件。
selectImports
6、扩展点(postProcessBeanFactory())。容器扩展点。
FrameworkServletdoGet()
RequestMappingInfo包装RequestMapping注解信息
6
是
ProxyTransactionManagementConfiguration
Spring 事务
5、执行业务逻辑(handlerAdapter的handle方法)
@Bean
目标方法
3、根据handler获取handlerAdapter(HandlerAdapter)
3
InfrastructureAdvisorAutoProxyCreator该类实现了BeanPostProcessor在后置方法中创建了代理对象
1、启用AOP。@EnableAspectJAutoProxy
Spring AOP流程
2、通过注解@EnableAspectJAutoProxy中的@Import注入类AspectJAutoProxyRegistrar
11、JSR-250@PreDestroy
3、准备刷新(prepareRefresh())。主要检查必要属性(验证)并初始化ApplicationListener(时间监听器)和ApplicationEvent(事件)两个集合。
Spring IOC容器创建过程(AnnotationConfigApplicationContext)
AOP动态代理方式选择
1、文件类型处理(MultipartResolver)
JDK动态代理
13、实例化所有非懒加载的bean(finishBeanFactoryInitializing())。实例化所有非懒加载bean(主要是用户bean包括被@Configuration修饰的)。
set注入
5、通过getAdvicesAndAdvisorsForBean获取增强类
12、注册监听器(registerListeners())。注册监听器,检查注册的bean中是否有ApplicationListener如果有则注册到 ApplicationEventMulticaster中去。
FrameworkServletprocessRequest()
AnnotationTransactionAttributeSource@Transactional注解解析类
9
AspectJAfterThrowingAdvice@AfterThrowing
AOP创建代理
12、拦截器执行(HandlerInterceptor.afterCompletion)
TransactionManagementConfigurationSelector间接实现了ImportSelector
6、BeanPostProcessorpostProcessBeforeInitialization()
url
目标类是否是接口
7、激活BeanFactoryPostProcessor(invokeBeanFactoryPostProcessors())。激活BeanFactoryPostProcessor。按照优先级、顺序、普通的顺序来调用BeanDefinitionRegistryPostProcessor类型的BeanFactoryPostProcessor的postProcessBeanDefinitionRegistry方法然后调用所有的BeanFactoryPostProcessor的postProcessBeanFactory方法。主要是实例化激活ConfigurationClassPostProcessor。并且扫描注册需要加入到spring容器中的类(未实例化)、添加注册并实例化且把ImportAwareBeanPostProcessor到工厂中。
3、BeanNameAwaresetBeanName()处理
MappingRegistration包装mapping和handlerMethod
FrameworkServletservice()
BeanFactoryTransactionAttributeSourceAdvisor事务增强器实现了Advisor接口
5
10、BeanPostProcessorpostProcessAfterInitialization()
10
registerBeanDefinitions
创建代理过程
8、InitializingBean afterPropertiesSet
10、视图解析(ViewResolver)
2、依赖注入
4、获取对象时会调用AnnotationAwareAspectJAutoProxyCreator的postProcessAfterInitialization方法
没有实现接口(SpringProxy除外)
8
DispatcherServletdoDispatch()
6、视图名称转换(RequestToViewNameTranslator)
AspectJAroundAdvice@Around
5、准备容器(parepareBeanFactory())。设置类加载器、EL表达式解析器、属性解析器、后置处理器 (ApplicationContextAwareProcessor、ApplicationListenerDetector)、忽略一些自动配置接口(ApplicationContextAware)、注册默认的环境变量。
7
AspectJAfterReturningAdvice(需适配)AfterReturningAdviceAdapter(适配器)AfterReturningAdviceInterceptor@AfterReturing
10、注册并初始化应用事件广播器(initApplicationEventMulticaster())。初始化应用事件广播器。如果用户没有配置applicationEventMulticaster则注入默认的SimpleApplicationEventMulticaster。
HandlerMethod包装controller对象和方法
11、视图渲染
8、异常处理(HandlerExceptionResolver)
1
4、获取容器(obtainFreshBeanFactory())。主要是获取并设置容器序列号ID。
1、准备刷新(new AnnotationConfigApplicationContext())。在new的时候创建环境、DefaultListableApplicationContext容器。注册ConfigurationClassPostProcessor(用户处理@Configuration注解)、AutowiredAnnotationBeanPostProcessor(用户处理@Autowired注解)、CommonAnnotationBeanPostProcessor(用户处理JSR-250注解)、EventListenerMethodProcessor、DefaultEventListenerFactory。
7、根据动态代理工厂创建代理类。
AutoProxyRegistrar实现了ImportBeanDefinitionRegistrar
5、ApplicationContextAwaresetApplicationContext()处理
6、获取动态代理工厂。可能是JdkDynamicAopProxy或者ObjenesisCglibAopProxy默认是JdkDynamicAopProxy
3、通过类AspectJAutoProxyRegistrar(实现了ImportBeanDefinitionRegistrar)注入类AnnotationAwareAspectJAutoProxyCreator
Spring MVC执行流程
4、前置拦截器执行(HandlerInterceptor.preHandler)
事务核心类
调用过程
目标类已经是代理类
7、JSR-250@PostConstruct
Cglib动态代理
11、扩展点(onRefresh())。扩展点(springboot嵌入式tomcat就是在ServletWebServerApplicationContext中扩展此方法)。
7、后置拦截器执行(HandlerInterceptor.postHandler)
是否代理目标类本身
2、根据request获取Handler(HandlerMapping)
TransactionInterceptor事务拦截器实现了MethodInterceptor接口
AspectJMethodBeforeAdvice(需适配)MethodBeforeAdviceAdapter(适配器)MethodBeforeAdviceInterceptor@Before
13、destroy()
DispatcherServletdoService()
HttpServletservice()
4、BeanFactoryAwaresetBeanFactory()处理
4
@EnableTransactionManagement
12、DisposableBeandestroy()
1、bean实例化
ExposeInvocationInterceptor
9、注册并实例化资源国际化(initMessageSource())。资源国际化,不同语言的消息体,国际化处理。如果用户没有配置messageSource则注入默认的DelegatingMessageSource。
0 条评论
回复 删除
下一页