随笔分类 - Spring
摘要:循环依赖概述 在Spring中,当实例化完成之后,要开始进行初始化赋值操作,但是赋值的时候,值的类型有可能是引入类型,需要从Spring容器中获取具体的某个对象来完成赋值操作,而此时,需要引入的对象可能被创建了,也可能没被创建,如果被创建了,那么直接获取即可,如果没有被创建,在整个初始化过程中就会涉
阅读全文
摘要:装饰模式与代理模式 如果开发者想对某个类的功能进行逻辑增强,可按需使用装饰模式或代理模式对该类进行功能增强; 装饰模式 装饰者模式能动态地给一个对象增加一些额外的职责,就新增功能来说,装饰者模式比生成子类更为灵活; 其中,Component是定义的一个对象接口,可以给这些对象动态地添加职责;Conc
阅读全文
摘要:前言 在面向对象编程领域中,六大原则之一的依赖倒置原则提到的原则规定: 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口; 抽象接口不应该依赖于具体实现,而具体实现则应该依赖于抽象接口; 参考:[https://en.wikipedia.org/wiki/Dependency_inve
阅读全文
摘要:BeanFactory体系结构 BeanFactory BeanFactory作为Spring容器的顶层接口,那么它的作用一定是最简单,最核心的,特性如下: 基础的容器 定义了作用域的概念 集成了环境配置 支持多种类型的配资源 层次性的设计(父子结构) 完整的生命周期控制机制 Javadoc Bea
阅读全文
摘要:Environment的描述 Javadoc中的描述 Environment是表示当前应用程序正在其中运行的环境的接口,它为应用环境制定了两个关键的方面:profile和properties,与属性访问有关的方法通过PropertyResolver这个父接口公开(其中,PropertyResolve
阅读全文
摘要:BeanDefinitionRegistry描述 Javadoc BeanDefinitionRegistry包含beanDefinition的注册表的接口(例如RootBeanDefinition和ChildBeanDefinition实例);通常由内部与 AbstractBeanDefiniti
阅读全文
摘要:BeanDefinition描述 Javadoc BeanDefinition描述了一个bean的实例,该实例具有属性值,构造函数参数值以及具体实现所提供的更多信息;这只是一个最小的接口,它的主要目的是允许BeanFactoryPostProcessor(例如PropertyPlaceholderC
阅读全文
摘要:Spring中的资源模型 ClassLoader类的getResource和getResourceAsStream方法是原生JDK中内置的资源加载文件的方式; Spring中资源模型顶级接口不是Resource,而是InputStreamSource接口; Spring为何自己实现一套资源加载方式?
阅读全文
摘要:在没有使用Spring时,开发者创建对象一般都是使用new/反射创建对象;Spring出来后简化了开发方式,它提供了一个IoC容器的实现,用于帮助开发者以依赖注入的方式管理对象之间的依赖关系,从而将开发者创建对象的所有权转移到IoC容器上,这使得Spring易于整合第三方模块,因此Spring更是一
阅读全文
摘要:在Spring中,默认创建的对象是单例的,Spring会在一级缓存中持有该对象,方便下次直接获取,如果创建的是多例对象,Spring每次则会创建新的对象,不会进行缓存; 如果想在一个单例bean下引用一个多例bean,此时需要使用LookUp来解决; 测试如下: ObjectA的getObjectC
阅读全文
摘要:beanDefinition冻结操作 在分析beanDefinition合并操作前,先简单了解一下beanDefinition的冻结操作; 之前说过BeanFactoryPostProcessor这个后置处理器的执行时机是在AbstractApplicationContext#refresh方法里调
阅读全文
摘要:在执行DefaultListableBeanFactory#preInstantiateSingletons方法时会创建非懒加载的单例Bean,这个创建过程是通过调用AbstractBeanFactory#getBean(java.lang.String)创建的; 下面分析AbstractBeanF
阅读全文
摘要:BeanFactory BeanFactory是Bean的工厂,Spring的顶层核心接口,它为Spring的IoC功能提供了基础,它使用了简单工厂,负责生产Bean,Bean的定义信息; BeanFactory的类图 ApplicationContext 从上面的类图可以看出Application
阅读全文
摘要:什么是bean定义信息? bean定义信息是bean在Spring中的描述,也就是BeanDefinition,里面存放bean元数据,比如Bean类名、scope、属性、构造函数参数列表、依赖的bean、是否是单例类、是否是懒加载等一些列信息;有了BeanDefinition,Spring容器可以
阅读全文
摘要:在Spring中,有很多xxxAware接口,这些xxxAware接口的作用是把Spring的xxx组件依赖注入到实现了Aware接口的对象实例中;可在自定义的组件需要Spring的内部组件时使用; 以下Spring版本为5.2.4.RELEASE; Aware的层次图如下; org.springf
阅读全文
摘要:BeanPostProcessor BeanPostProcessor的概念容易与BeanFactoryPostProcessor的概念混淆,看上去都是以PostProcessor,但两者不是同一个概念,用处也不同;BeanPostProcessor是存在于对象实例化后,进行初始化的阶段;而Bean
阅读全文
摘要:Spring 的核心是 ApplicationContext,它负责管理 Bean的完整生命周期;当加载 Bean 时,ApplicationContext 发布某些类型的事件;例如,当上下文启动时,ContextStartedEvent 发布消息,当上下文停止时,ContextStoppedEve
阅读全文