岁月人
极客精神,热衷源码探索,持续学习
跟随云原生脚步,探索深度学习方向
展开
-
spring核心源码分析第三十一篇 Aop核心源码分析-总结
文章目录总结总结我们讲解了aop工具类的启动,BPP有三个进行aop的时机讲述了TargetSource的作用,扩展目标对象的构建讲述了jdk代理和cglib代理选择的时机,基于接口讲述了aop的调用,如何构建拦截器链,以及执行完拦截器链后调用目标方法讲述了环绕通知的特殊性,将proceed方法交由用户程序调用讲述了一个@Aspect内多个Advisor的排序规则,多个@Aspect只能通过@Order控制@Aspectbean的顺序,然后对Order排序好的内部按照排序注解加方法名排序,而原创 2022-01-09 00:51:38 · 1835 阅读 · 0 评论 -
spring核心源码分析第三十篇 Aop核心源码分析一Aop的执行JdkDynamicAopProxy.invoke
这里写目录标题源码分析-invoke调用代理方法源码分析-getInterceptorsAndDynamicInterceptionAdvice-拦截器链路获取源码分析-invoke调用代理方法获取targetSource通过targetSource获取目标对象获取到可以应用到此方法上的拦截器列表invocation控制拦截器链的调用final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializa原创 2022-01-08 18:18:11 · 1981 阅读 · 0 评论 -
spring核心源码分析第二十九篇 Aop核心源码分析一AbstractAutoProxyCreator后置处理实现aop第二节
Proxy代理创建前文回顾创建代理入口代理创建源码分析AopProxy的选择jdk创建代理对象cglib创建代理对象总结前文回顾上一节通过getAdvicesAndAdvisorsForBean获取到List顾问合集本章主要通过返回的顾问合集构建代理创建代理入口获取可匹配目标bean的顾问集合Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null); 不为nu原创 2022-01-08 17:29:19 · 2152 阅读 · 0 评论 -
原创 spring核心源码分析第二十八篇 Aop核心源码分析一AbstractAutoProxyCreator后置处理实现aop
文章目录摘要源码分析aop入口增强实现getAdvicesAndAdvisorsForBean获取顾问合集findCandidateAdvisors通过advisorRetrievalHelper和aspectJAdvisorsBuilder完成顾问获取findAdvisorsThatCanApply完成切入点匹配类级别匹配与方法级别匹配的区别总结扩展点-IntroductionAdvisor扩展作用之demo介绍摘要targetsource的概念清楚后,正式进入日常的aop创建流程源码分析aop入原创 2022-01-08 16:34:11 · 2196 阅读 · 0 评论 -
spring核心源码分析第二十七篇 Aop核心源码分析一TargetSource作用
文章目录摘要自定义TargetSourceCreator实现postProcessBeforeInstantiation返回bean实例摘要前文指出,aop有三个拦截入口,本文首先分析postProcessBeforeInstantiation在ioc章程中,提到如果postProcessBeforeInstantiation返回实例不为null,便不在执行spring doCreateBean 所以一般这个入口不太会走到自定义TargetSourceCreator实现postProcessBe原创 2022-01-07 15:05:24 · 2185 阅读 · 0 评论 -
spring核心源码分析第二十六篇 Aop核心源码分析一开启aop之EnableAspectJAutoProxy
文章目录aop-beandefinition加载总结aop-beandefinition加载1 通过启动类配置AspectJAutoProxyRegistrar 完成beandefinition注册2 AspectJAutoProxyRegistrar继承ImportBeanDefinitionRegistrar完成从多个aop工具选择一个aop3 通过AopConfigUtils工具类完成注册4 构建beandefinition并注册beanfactory通过启动类配置AspectJAut原创 2022-01-07 13:36:22 · 1700 阅读 · 0 评论 -
spring核心源码分析第二十五篇 Aop核心源码分析一总览
这里写目录标题摘要AnnotationAwareAspectJAutoProxyCreator的初始化与工作流程bean 拦截增强入口总结摘要1 aop的核心关键为构建aop工具通过aop工具对bean实例化进行拦截,并对合适的bean实现代理核心工具类;AnnotationAwareAspectJAutoProxyCreator后置处理器,负责拦截bean并且查找切面完成代理类创建AnnotationAwareAspectJAutoProxyCreator的初始化与工作流程以注解为原创 2022-01-07 11:45:06 · 1559 阅读 · 0 评论 -
spring核心源码分析第二十四篇 refresh流程总结
文章目录总结BeanDefinition注册Bean注册总结通过二十三篇文章的分析,我们讲解了beanDefinition的构建流程,单例bean的注册流程,其总体如下相关知识点BeanDefinition注册beandefinition的注册可以通过@Configuration ,xml,@component注解以及@Import等方式注册,这其中ImportSelector ImportBeanDefinitionRegister等扩展点可以拓展bean定义的渠道xml注册中除了spri原创 2022-01-06 11:13:28 · 1633 阅读 · 0 评论 -
spring核心源码分析第二十三篇 BeanPostProcessor分类以及几个重要的BPP作用
文章目录BeanPostProcessor分类二级目录三级目录BeanPostProcessor分类名称方法作用BeanPostProcessorpostProcessBeforeInitialization postProcessAfterInitializationbean初始化后置处理器,在bean创建以及依赖注入完毕后调用InstantiationAwareBeanPostProcessorpostProcessBeforeInstantiation postP原创 2022-01-06 11:38:57 · 1694 阅读 · 0 评论 -
spring核心源码分析第二十二篇 refresh流程一finishBeanFactoryInitialization三步曲之initializeBean
文章目录源码分析一initializeBean总结源码分析一initializeBeanprotected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) { 调用aware接口完成aware的目标类注入 invokeAwareMethods(beanName, bean); 调用bean后置处理器的postProcessBeforeInitializ原创 2022-01-05 15:42:19 · 1569 阅读 · 0 评论 -
spring核心源码分析第二十一篇 refresh流程之循环依赖以及解决方案
文章目录spring循环依赖解决图AutowiredAnnotationBeanPostProcessor.postProcessProperties源码分析总结本文主要以Autowired为例,介绍AutowiredAnnotationBeanPostProcessor#postProcessProperties,如何处理循环依赖spring循环依赖解决图黄色表示ObjectA的获取流程绿色表示ObjectB的获取流程紫色表示与三级缓存小光蓝色表示三级缓存的集合浅黄色表示依赖注入的衔接原创 2022-01-05 14:54:44 · 1269 阅读 · 0 评论 -
spring核心源码分析第二十篇 refresh流程一finishBeanFactoryInitialization三步曲之populateBean
这里写目录标题populateBean一流程图populateBean-源码分析总结populateBean一流程图存在InstantiationAwareBeanPostProcessor自定义依赖注入,则调用postProcessAfterInstantiation完成;根据postProcessAfterInstantiation返回Boolean值决定是否完成spring自带的DI算法如果配置了autowired_by_name,则根据名称进行注入如果配置了autowired_by_typ原创 2022-01-05 12:40:09 · 1219 阅读 · 0 评论 -
spring核心源码分析第十九篇refresh流程一createBeanInstance构造方法选择determineCandidateConstructors+autowireConstructor
文章目录原理分析原码分析一determineCandidateConstructors原码分析一autowireConstructor总结原理分析determineCandidateConstructors1 遍历所有的构造方法,如果有Autowired(required=true)的构造函数且只有一个返回该构造函数2遍历所有的构造方法,如果有Autowired(required=true)的构造函数且有多个,报错如果有多个注解标注的构造函数,则返回所有注解标注的外加无参构造如果只有一个构原创 2022-01-04 17:27:39 · 1203 阅读 · 0 评论 -
spring核心源码分析第十八篇 refresh流程一finishBeanFactoryInitialization三步曲之createBeanInstance
这里写目录标题createBeanInstance核心流程demo讲解supplier与factorymethoddemo一supplierdemo一instantiateUsingFactoryMethod源码分析源码分析一构造方法的选择源码分析一instantiateBean的实现jdk创建对象cglib创建对象总结createBeanInstance核心流程Supplier机制FactoryMethod机制autowireConstructor机制instantiateBean机制原创 2022-01-04 15:48:47 · 702 阅读 · 0 评论 -
spring核心源码分析第十七篇 refresh流程之finishBeanFactoryInitialization-单例bean实例化流程
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2022-01-04 00:35:45 · 380 阅读 · 0 评论 -
spring核心源码分析第十六篇 refresh流程之registerListeners
文章目录registerListeners源码分析earlyApplicationEvents详解总结registerListeners源码分析 protected void registerListeners() { 将applicationcontext的applicationListeners注册到广播器 for (ApplicationListener<?> listener : getApplicationListeners()) { getApplicationEv原创 2022-01-04 00:32:31 · 395 阅读 · 0 评论 -
spring核心源码分析第十五篇 refresh流程之onRefresh
这里写目录标题调用链路核心源码总结调用链路AnnotationConfigServletWebServerApplicationContextServletWebServerApplicationContext#onRefreshGenericWebApplicationContext#onRefresh#onRefresh核心源码创建tomcat服务器 protected void onRefresh() { super.onRefresh(); try原创 2022-01-04 00:16:13 · 446 阅读 · 0 评论 -
spring核心源码分析第十四篇 refresh流程之initApplicationEventMulticaster
文章目录广播器源码分析使用方式监听方式广播器源码分析创建一个广播器并注册到bean工厂protected void initApplicationEventMulticaster() { ConfigurableListableBeanFactory beanFactory = getBeanFactory(); if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) { this.app原创 2022-01-04 00:05:32 · 315 阅读 · 0 评论 -
spring核心源码分析第十三篇 refresh流程之initMessageSource
这里写目录标题i18n初始化简介i18n初始化简介 protected void initMessageSource() { ConfigurableListableBeanFactory beanFactory = getBeanFactory(); if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) { this.messageSource = beanFactory.getBean(MESSAGE_SOURCE_B原创 2022-01-03 23:02:37 · 311 阅读 · 0 评论 -
spring核心源码分析第十二篇 refresh流程之registerBeanPostProcessors
这里写目录标题源码分析常见的BeanPostProcessorBeanPostProcessor分类总结源码分析将beanfactory中所有类型为BeanPostProcessor的beandefinition获取并通过getbean()得到实例对这些BeanPostProcessor按继承的排序接口类型分为3类,在对分类进行排序将所有的BeanPostProcessor添加到beanfactory.beanPostProcessors属性beanPostProcessors为一个集合,允许重原创 2022-01-03 22:35:10 · 419 阅读 · 0 评论 -
spring核心源码分析第十一篇 refresh流程之前半部分总结
这里写目录标题总结扩展点总结第一篇,以图示的方式展示了spring启动流程,其内容较多,图示过于庞大,不利于阅读,作者画图水平确实有限,望读者见谅前10篇都是在讲解一件事,spring的BeanDefinition管理(解析,生成,注册)此外本文以AnnotationConfigServletWebServerApplicationContext作为refresh方法的对象,既即包含xml的BeanDefinition处理,也包含注解的处理其中xml的处理由XmlBeanDefinitionRe原创 2022-01-02 22:29:29 · 328 阅读 · 0 评论 -
spring核心源码分析第十篇 refresh流程之invokeBeanFactoryPostProcessors-postProcessBeanFactory-对full模式的代理增强
以ConfigurationClassPostProcessor为例子讲解invokeBeanFactoryPostProcessors-postProcessBeanFactory原创 2022-01-02 21:45:13 · 502 阅读 · 0 评论 -
spring核心源码分析第九篇 refresh流程之invokeBeanFactoryPostProcessor-BeanDefinition注册实现
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-12-31 16:00:14 · 439 阅读 · 0 评论 -
spring核心源码分析第八篇 refresh流程之invokeBeanFactoryPostProcessors-BeanDefinition分类
文章目录BeanDefinition类图关系概述关于MergedLocalBeanDefinition和ChildBeanDefinition总结BeanDefinition类图关系概述AbstractBeanDefinition 抽象公共定义常用定制RootBeanDefinition: 不能设置parentAnnotatedGenericBeanDefinition有注释的bean定义ChildBeanDefinition : 必须通过构造函数设置parent原创 2021-12-31 15:53:08 · 513 阅读 · 0 评论 -
spring核心源码分析第七篇 refresh流程之invokeBeanFactoryPostProcessors-ConfigurationClassPostProcessor执行
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-12-31 02:22:02 · 513 阅读 · 0 评论 -
spring核心源码分析第六篇 refresh流程之invokeBeanFactoryPostProcessors-执行流程
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-12-31 01:25:30 · 595 阅读 · 0 评论 -
spring核心源码分析第五篇 refresh流程之postProcessBeanFactory
postProcessBeanFactory作用AbstractApplicationContext并没有任何实现,但其允许在上下文子类中重写其方法的注释翻译如下: 在beanfactory加载完毕后,尚未构建BeanDefinition和实例化之前,允许子类覆写ApplicationContext来实现相关功能,例如: 修改BeanFactory 或者注册BeanPostProcessor等等spring并没有约束子类重写后具体的实现,只是告知当前的被执行时机是beanFactory加载完成,Be原创 2021-12-30 15:41:15 · 1349 阅读 · 0 评论 -
spring核心源码分析第四篇 refresh流程之prepareBeanFactory
这里写目录标题prepareBeanFactory的作用源码分析总结prepareBeanFactory的作用application.refresh的核心作用是完成**xml**,**注解**,**自定义扩展点**的全部解析 解析完毕生成Bean对象元信息 BeanDefinition然后依赖所有BeanDefinition将单例bean进行初始化而在此之前我们需要对容器本身做一些初始化工作,**prepareBeanFactory的作用就是完成一些初始化工作从而更好的配合BeanDefiniti原创 2021-12-30 14:23:16 · 451 阅读 · 0 评论 -
spring核心源码分析第三篇 refresh流程之obtainFreshBeanFactory
获取beanFactory源码概览refreshBeanFactory不同环境区别总结源码概览 protected ConfigurableListableBeanFactory obtainFreshBeanFactory() { 1 设置spring.application.name refreshBeanFactory(); 获取bean工厂 return getBeanFactory(); }校验并行refresh问题 并设置id(一般为spring.application原创 2021-12-30 13:31:49 · 444 阅读 · 0 评论 -
spring核心源码分析第二篇 refresh流程之prepareRefresh
这里写目录标题源码一览扩展点扩展点源码分析demo案例总结:源码一览 protected void prepareRefresh() { // 启动标记 this.startupDate = System.currentTimeMillis(); this.closed.set(false); this.active.set(true); if (logger.isDebugEnabled()) { if (logger.isTraceEnabled()) { log原创 2021-12-30 12:02:56 · 356 阅读 · 0 评论 -
spring核心源码分析
spring核心源码分析原创 2021-12-30 01:48:35 · 468 阅读 · 0 评论