自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 spring-core 源码学习-IoC 之ApplicationContext 相关接口架构分析(三十六)

spring-core IoC 之ApplicationContext 相关接口架构分析1. ApplicationContext2. ApplicationContext 的子接口2.1 WebApplicationContext2.2 ConfigurableApplicationContext2.3 ConfigurableWebApplicationContext3. ClassPathXmlApplicationContext3.1 MessageSource3.2 ApplicationEven

2021-10-28 16:09:16 227

原创 spring-core 源码学习-IoC 之环境 & 属性:PropertySource、Environment、Profile(三十五)

spring-core IoC 之环境 & 属性:PropertySource、Environment、Profile1. 概括2. Properties2.1 PropertyResolver1. 概括Spring 环境 & 属性由四个部分组成:PropertySource、PropertyResolver、Profile 和 Environment。PropertySource:属性源,key-value 属性对抽象,用于配置数据。PropertyResolver:属性解析器,

2021-10-27 17:38:27 238

原创 spring-core 源码学习-IoC 之BeanDefinition 注册表:BeanDefinitionRegistry(三十四)

spring-core IoC 之BeanDefinition 注册表:BeanDefinitionRegistry将定义 Bean 的资源文件解析成 BeanDefinition 后需要将其注入容器中,这个过程由 BeanDefinitionRegistry 来完成。1. AliasRegistry2. BeanDefinitionRegistry3. SimpleBeanDefinitionRegistry4. DefaultListableBeanFactory4.1 registerBeanDef

2021-08-20 15:50:26 200

原创 spring-core 源码学习-IoC 之Bean 的实例化策略:InstantiationStrategy(三十三)

spring-core IoC 之Bean 的实例化策略:InstantiationStrategy1. InstantiationStrategy2. SimpleInstantiationStrategy3. MethodOverrides4. CglibSubclassingInstantiationStrategy4.1 MethodOverrideCallbackFilter4.2 LookupOverrideMethodInterceptor4.3 ReplaceOverrideMethodIn

2021-08-18 17:30:34 358

原创 spring-core 源码学习-IoC 之深入分析 PropertyOverrideConfigurer(三十二)

spring-core IoC 之深入分析 PropertyOverrideConfigurer1. 使用1.1 示例一1.2 示例二1.3 示例三2. 实现原理3. 小结BeanFactoryPostProcessor 作用与 BeanDefinition 完成加载之后与 Bean 实例化之前,是 Spring 提供的一种强大的扩展机制。它有两个重要的子类,一个是 PropertyPlaceholderConfigurer,另一个是 PropertyOverrideConfigurer ,其中 Prop

2021-08-17 20:00:46 236

原创 spring-core 源码学习-IoC 之 PropertyPlaceholderConfigurer 的应用(三十一)

spring-core IoC 之 PropertyPlaceholderConfigurer 的应用1. 多环境切换PropertyPlaceholderConfigurer,它允许我们在 XML 配置文件中使用占位符并将这些占位符所代表的资源单独配置到简单的 properties 文件中来加载。这个特性非常重要,因为它我们对 Bean 实例属性的配置变得非常容易控制了,主要使用场景有:动态加载配置文件,多环境切换属性加解密下面我们就第一个应用场景来做说明。1. 多环境切换在我们项目开发过

2021-08-17 19:34:04 113

原创 spring-core 源码学习-IoC 之深入分析 PropertyPlaceholderConfigurer(三十)

spring-core IoC 之深入分析 PropertyPlaceholderConfigurer

2021-08-17 17:52:00 137

原创 spring-core 源码学习-IoC 之深入分析 BeanFactoryPostProcessor(二十九)

spring-core IoC 之深入分析 BeanFactoryPostProcessor1. BeanFactoryPostProcessor2. 示例3. 原理在深入分析 BeanPostProcessor中,深入介绍了 BeanPostProcessor 的实现机制。在这篇文章中提到 BeanPostProcessor 是 Spring 提供一种扩展机制,该机制允许我们在 Bean 实例化之后初始化之际对 Bean 进行增强处理(前、后置处理)。同样在 Spring 容器启动阶段,Spring

2021-07-29 12:00:37 73

原创 spring-core 源码学习-IoC 之深入分析 Bean 的生命周期(二十八)

spring-core IoC 之深入分析 Bean 的生命周期在分析 Spring Bean 实例化过程中提到 Spring 并不是一启动容器就开启 bean 的实例化进程,只有当客户端通过显示或者隐式的方式调用 BeanFactory 的 #getBean(…) 方法来请求某个实例对象的时候,它才会触发相应 bean 的实例化进程。当然,也可以选择直接使用 ApplicationContext 容器,因为该容器启动的时候会立刻调用注册到该容器所有 bean 定义的实例化方法。当然,对于 BeanFac

2021-07-28 17:23:24 103

原创 spring-core 源码学习-IoC 之深入分析 InitializingBean 和 init-method(二十七)

spring-core IoC 之深入分析 InitializingBean 和 init-method1. InitializingBean1.1 示例1.2 invokeInitMethods2. init-method2.1 示例3. 小结1. InitializingBeanSpring 的 org.springframework.beans.factory.InitializingBean 接口,为 bean 提供了定义初始化方法的方式,它仅包含了一个方法:#afterPropertiesSe

2021-07-28 16:49:35 248

原创 spring-core 源码学习-IoC 之加之加载 Bean:创建 Bean(二)之实例化 Bean 对象(1)(二十一)

spring-core IoC 之之加载 Bean:创建 Bean(二)之实例化 Bean 对象(11. createBeanInstance1.1 obtainFromSupplier1.1.1 Supplier1.1.2 obtainFromSupplier1.2 instantiateUsingFactoryMethod()1.2.1 ConstructorResolver2. 小结1. createBeanInstance这篇我们关注创建 bean 过程中的第一个步骤:实例化 bean,对应的方

2021-07-28 16:32:53 173

原创 spring-core 源码学习-IoC 之深入分析 BeanPostProcessor(二十六)

spring-core IoC 之深入分析 BeanPostProcessor1. BeanPostProcessor 接口1. BeanPostProcessor 接口Spring 作为优秀的开源框架,它为我们提供了丰富的可扩展点,除了前面提到的 Aware 接口,还包括其他部分,其中一个很重要的就是 BeanPostProcessor。这篇文章主要介绍 BeanPostProcessor 的使用以及其实现原理。我们先看 BeanPostProcessor 的定位:BeanPostProcesso

2021-07-16 18:41:30 87

原创 spring-core 源码学习-IoC 之深入分析 Aware 接口(二十五)

spring-core IoC 之深入分析 Aware 接口1. Aware 接口2. Aware 子类2.1 示例3. 小结AbstractAutowireCapableBeanFactory 的 #doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args) 方法,主要干三件事情:实例化 bean 对象:#createBeanInstance(String beanName, RootB

2021-07-10 18:27:57 137

原创 spring-core 源码学习-IoC 之加载 Bean:创建 Bean(六)之初始化 Bean 对象(二十四)

spring-core IoC 之加载 Bean:创建 Bean(六)之初始化 Bean 对象1. initializeBean1. initializeBean// AbstractAutowireCapableBeanFactory.javaprotected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) { if (System.getS

2021-07-10 18:13:22 85

原创 spring-core 源码学习-IoC 之加载 Bean:创建 Bean(五)之循环依赖处理(二十三)

spring-core IoC 之加载 Bean:创建 Bean(五)之循环依赖处理1. 什么是循环依赖2. 解决循环依赖2.1 getSingleton2.2 addSingletonFactory2.3 addSingleton3. 小结这篇分析 #doCreateBean(…) 方法的第三个过程:循环依赖处理。其实,循环依赖并不仅仅只是在 #doCreateBean(…) 方法中处理,而是在整个加载 bean 的过程中都有涉及。所以,本文内容并不仅仅只局限于 #doCreateBean(…) 方法,

2021-07-10 17:47:31 112

原创 spring-core 源码学习-IoC 之加载 Bean:创建 Bean(四)之属性填充(二十二)

spring-core IoC 之加载 Bean:创建 Bean(四)之属性填充1. populateBean1.1 自动注入1.1.1 autowireByName1.1.2 autowireByType1.2 applyPropertyValues#doCreateBean(…) 方法,主要用于完成 bean 的创建和初始化工作,我们可以将其分为四个过程:#createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] arg

2021-07-08 18:53:47 117

原创 spring-core 源码学习-IoC 之加载 Bean:创建 Bean主流程(二十)

spring-core IoC 之加载 Bean:创建 Bean主流程1. createBean 抽象方法2. createBean 默认实现2.1 解析指定 BeanDefinition 的 class2.2 处理 override 属性2.3 实例化的前置处理2.4 创建 Bean3. 小结1. createBean 抽象方法有一个核心方法没有讲到, #createBean(String beanName, RootBeanDefinition mbd, Object[] args) 方法,代码如下

2021-07-05 15:43:11 151

原创 spring-core 源码学习-IoC 之加载 Bean:分析各 scope 的 Bean 创建(十九)

spring-core IoC 之加载 Bean:分析各 scope 的 Bean 创建1. singleton1. singletonSpring 的 scope 默认为 singleton ,其初始化的代码如下:// AbstractBeanFactory.javaif (mbd.isSingleton()) { // 单例模式 sharedInstance = getSingleton(beanName, () -> { try { re

2021-07-05 14:41:02 93

原创 spring-core 源码学习-IoC 之加载 Bean:parentBeanFactory 与依赖处理(十八)

spring-core IoC 之加载 Bean:parentBeanFactory 与依赖处理如果从单例缓存中没有获取到单例 Bean 对象,则说明两种两种情况:1. 检测2. 检查父类 BeanFactory3. 类型检查4. 获取 RootBeanDefinition5. 处理依赖5.1 isDependent5.2 registerDependentBean5.3 getBean如果从单例缓存中没有获取到单例 Bean 对象,则说明两种两种情况:1、该 Bean 的 scope 不是 sing

2021-07-02 16:12:45 157

原创 spring-core 源码学习-IoC 之加载 Bean:从单例缓存中获取单例 Bean(十七)

spring-core IoC 之加载 Bean:从单例缓存中获取单例 Bean1. getSingleton1.1 isSingletonCurrentlyInCreation2. getObjectForBeanInstance2.1 getObjectFromFactoryBean2.3 postProcessObjectFromFactoryBean2.3.13 小结从这篇博客开始我们开始加载 Bean 的第一个步骤,从缓存中获取 Bean 。代码片段如下:// AbstractBeanFact

2021-07-01 16:57:02 169

原创 spring-core 源码学习-IoC 之开启bean的加载(十六)

spring-core IoC 之开启bean的加载1. getBean2. doGetBean2.1 获取 beanName2.2 从单例 Bean 缓存中获取 Bean2.3 原型模式依赖检查2.4 从 parentBeanFactory 获取 Bean2.5 指定的 Bean 标记为已经创建或即将创建2.6 获取 BeanDefinition2.7 依赖 Bean 处理2.8 不同作用域的 Bean 实例化2.9 类型转换3. 小结Spring IoC 容器所起的作用如上图所示,它会以某种方式加载

2021-06-30 16:32:48 126

原创 spring-core 源码学习-IoC 之装载 BeanDefinitions 总结(十五)

spring-core IoC 之装载 BeanDefinitions 总结前面 13 篇博文从源码层次,分析了 IoC BeanDefinition 装载的整个过程,这篇就这些内容做一个总结将其连贯起来。1. Resource 定位2. BeanDefinition 的载入和解析2.1 转换为 Document 对象2.2 注册 BeanDefinition 流程2.2.1 对 Document 对象的解析2.2.1.1 默认标签解析2.2.1.2 自定义标签解析2.2.2 注册 BeanDefinit

2021-06-29 15:23:39 118

原创 spring-core 源码学习-IoC 之注册解析的 BeanDefinitions(十四)

spring-core IoC 之注册解析的 BeanDefinitions1. BeanDefinitionReaderUtils2. BeanDefinitionRegistry2.1 通过 beanName 注册DefaultBeanDefinitionDocumentReader 的 #processBeanDefinition() 方法,完成 Bean 标签解析的核心工作。代码如下:// DefaultBeanDefinitionDocumentReader.javaprotected

2021-06-29 11:36:17 146

原创 spring-core 源码学习-IoC 之IoC 之解析自定义标签(十三)

spring-core IoC 之解析自定义标签1. 使用自定义标签1.1 创建组件1.2 定义 XSD 文件1.3 定义 Parser 类1.4 定义 NamespaceHandler 类1.5 定义 spring.handlers 文件1.6 定义 Spring.schemas 文件1.7 运行2. 解析自定义标签2.1 parseCustomElement2.2 getNamespaceHandlerResolver2.2.1 NamespaceHandlerResolver 的初始化2.3 reso

2021-06-28 20:21:51 121

原创 spring-core 源码学习-IoC 之IoC 之解析 <bean> 标签:解析自定义标签(十二)

spring-core IoC 之解析 标签:解析自定义标签1. decorateBeanDefinitionIfRequired2. decorateIfRequired3. 小结前面四篇文章都是分析 Bean 默认标签的解析过程,包括 基本属性、六个子元素(meta、lookup-method、replaced-method、constructor-arg、property、qualifier),涉及内容较多,拆分成了四篇文章,导致我们已经忘记从哪里出发的了。所以,我们先来回顾下。DefaultB

2021-06-28 17:07:37 86

原创 spring-core 源码学习-IoC 之IoC 之解析 <bean> 标签:constructor-arg、property、qualifier(十一)

spring-core IoC 之解析 标签:constructor-arg、property、qualifier1. constructor-arg 子元素1.1 示例1.2 parseConstructorArgElements1.3 parseConstructorArgElement1.4 parsePropertyValue1.5 parsePropertySubElement2. property 子元素2.1 示例2.2 parsePropertyElements2.3 parsePrope

2021-06-28 16:49:27 106

原创 spring-core 源码学习-IoC 之解析 <bean> 标签:meta、lookup-method、replace-method(十)

spring-core 解析 标签:meta、lookup-method、replace-method1. meta 子元素1.1 addMetadataAttribute1.2 getAttribute2. lookup-method 子元素2.1 示例2.2 parseLookupOverrideSubElements3. replace-method 子元素3.1 示例3.2 parseReplacedMethodSubElements4. 小结完成 bean 标签的基本属性解析后,会依次调用 B

2021-06-28 11:17:26 128

原创 spring-core 源码学习-IoC 之解析Bean:解析 <bean> 标签(九)

spring-core 解析 标签1. BeanDefinition1.1 BeanDefinition 的父关系1.2 BeanDefinition 的子关系2. 解析 Bean 标签2.1 createBeanDefinition2.2 parseBeanDefinitionAttributes前面历经千辛万苦终于到达解析 bean 标签步骤来了,解析 bean 标签的过程其实就是构造一个 BeanDefinition 对象的过程。 元素标签拥有的配置属性,BeanDefinition 均提供了相应

2021-06-25 17:51:10 118

原创 spring-core 源码学习-IoC 之解析Bean:解析 <bean> 标签:开启解析进程(八)

spring-core 解析 标签:开启解析进程1. processBeanDefinition2. parseBeanDefinitionElement2.1 parseBeanDefinitionElement2.2 createBeanDefinitionimport 标签解析完毕了,我们一起来看看 Spring 中最复杂也是最重要的标签 bean 标签的解析过程。1. processBeanDefinition在方法 #parseDefaultElement(…) 方法中,如果遇到标签为 b

2021-06-25 17:03:41 69

原创 spring-core 源码学习-IoC 之解析Bean:解析 import 标签(七)

spring-core 解析 import 标签1. import 示例2. importBeanDefinitionResource2.1 判断路径2.2 处理绝对路径2.3 处理相对路径3. 小结Spring 中有两种解析 Bean 的方式:如果根节点或者子节点采用默认命名空间的话,则调用 #parseDefaultElement(…) 方法,进行默认标签解析否则,调用 BeanDefinitionParserDelegate#parseCustomElement(…) 方法,进行自定义解析。

2021-06-25 15:59:44 94

原创 spring-core 源码学习-IoC 之 注册 BeanDefinitions(六)

spring-core 注册 BeanDefinitions1. createBeanDefinitionDocumentReader2. registerBeanDefinitions2.1 DefaultBeanDefinitionDocumentReader2.1.1 parseBeanDefinitions3. createReaderContext4. 小结获取 XML Document 对象后,会根据该对象和 Resource 资源对象调用 XmlBeanDefinitionReader#re

2021-06-24 20:39:30 86

原创 spring-core 源码学习-IoC 之 获取 Document 对象(五)

spring-core 获取 Document 对象1. DocumentLoader1.1 DefaultDocumentLoader2. EntityResolver2.1 子类2.2 作用2.3 DelegatingEntityResolver2.4 BeansDtdResolver2.5 PluggableSchemaResolver在 XmlBeanDefinitionReader#doLoadDocument(InputSource inputSource, Resource resource

2021-06-24 14:37:14 221

原创 spring-core 源码学习-IoC之获取验证模型(四)

spring-core 获取验证模型1. DTD 与 XSD 的区别1.1 DTD1.2 XSD2. getValidationModeForResource3. XmlValidationModeDetector#doLoadBeanDefinitions(InputSource inputSource, Resource resource) 方法中,中主要是做三件事情:调用 #getValidationModeForResource(Resource resource) 方法,获取指定资源(xml

2021-06-23 14:52:16 109

原创 spring-core 源码学习-IoC 之 加载 BeanDefinition(三)

spring-core 加载BeanDefinition1. loadBeanDefinitions2. doLoadBeanDefinitions2.1 doLoadDocument2.2 registerBeanDefinitions先看一段代码ClassPathResource resource = new ClassPathResource("bean.xml"); // <1>DefaultListableBeanFactory factory = new DefaultList

2021-06-23 14:25:51 92

原创 spring-core 源码学习-IoC 之 Spring 统一资源加载策略(二)

在学 Java SE 的时候,我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Resource Locator),但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位。然而,实际上资源的定义比较广泛,除了网络形式的资源,还有以二进制形式存在的、以文件形式存在的、以字节流形式存在的等等。而且它可以存在于任何场所,比如网络、文件系统、应用程序中。所以 java.net.URL 的局限性迫使 Spring 必须实现自己的资源加载策略,该资源

2021-06-22 17:10:48 124

原创 spring-core 源码学习-IOC体系(一)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-06-21 15:09:33 314

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除