![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring源码
java圈
熟悉spring、springboot、springcloud、设计模式、ddd思想
展开
-
bean的加载-从bean的实例中获取对象
无论是从缓存中获取到的bean还是通过不同的scope策略加载的bean都只是最原始的bean状态,并不一定使我们想要的bean1、对FactoryBean正确性进行验证如果指定的name是工厂相关,就是以&为前缀的而且beanInstance又不是FactoryBean的类型则验证不通过2、对非FactoryBean不做任何处理3、对bean进行转换3.1、首先需要加载bean3.2、然...原创 2018-06-21 09:05:00 · 1051 阅读 · 0 评论 -
事物增强器
TransactionInterceptor支撑着整个事物功能的架构,TransactionInterceptor继承自MethodInterceptor,改类是从invoke方法开始1、获取事物的属性对于事物处理来说,最基础或者说最首要的工作是获取事物属性2、加载配置中配置的TransactionManager3、不同的事物处理方式使用不同的逻辑4、在目标方法执行前获取事物并收集事物信息5、执行...原创 2018-07-09 09:07:34 · 822 阅读 · 0 评论 -
springmvc-DisPatcherServlet初始化
在springmvc中真正实现逻辑的是在DisPatcherServlet中进行的,DisPatcherServlet是实现servlet接口的实现类,init()方法在其父类HttpServletBean中1、封装及安正初始化参数主要是对初始化的参数进行封装2、将当前servlet实例转化成BeanWrapper3、注册相对应Resource的属性编辑器4、属性注入BeanWrappper为sp...原创 2018-07-09 09:04:55 · 1151 阅读 · 0 评论 -
容器扩展功能(三)-扩展功能
在进入函数postProcessBeanFactory前,spring已经对配置文件进行了解析,ApplicationContext的扩展功能由此扩展一、增加SPEL语言的支持类似OGNL表达式语言,以#{...}作为定界符默认可以使用#{bean.xxx}的形式调用相关的属性二、增加对属性编辑器的支持1、使用自定义属性编辑器通过集成ProoertyEditorSupport,重写setAsTex...原创 2018-06-27 09:33:11 · 901 阅读 · 0 评论 -
bean的加载-缓存中获取单例bean
单例只会在容器里面创建一次,后续获取bean直接从缓存中尝试获取,如果没有在尝试从singletonFactories中获取,创建bean的时候可能会出现依赖注入的情况,为了避免循环依赖,在还没有创建bean之前就会把bean的ObjectFactory加到缓存,依赖时,直接使用ObjectFactory就可以了1、具体的实现方法2、主要分为以下步骤一、检查缓存中是否存在实例二、实例如果为空,则锁...原创 2018-06-20 08:53:40 · 819 阅读 · 0 评论 -
容器的功能扩展(二)-环境准备和加载BeanFactory
一、环境准备prepareRefresh方法主要是做一些准备工作,比如对系统属性及环境变量的初始化验证1.1、initPropertySources复合spring的开放式结构设计,最大扩展spring的能力,可以根据自身的情况重写initPropertySources方法,进行个性化处理1.2、validateRequiredProperties对属性进行验证,如果重写方法initPropert...原创 2018-06-26 08:54:13 · 635 阅读 · 0 评论 -
bean的加载
bean的加载过程比bean的解析复杂的多,主要是AbstractBeanFactory下面的doGetBean方法实现1、转换对应的beanName传入的参数可能是bean的别名,也可能是FactoryBean,所以需要在这里转换2、尝试从缓存中加载单例单例在容器中只会创建一次,后面直接获取bean就行了,首先尝试从缓存中拿,如果不成功就从singletonFactories,因为创建单例存在依...原创 2018-06-19 09:38:16 · 852 阅读 · 2 评论 -
容器功能扩展(一)
spring中提供了另外一个接口ApplicationContext,用于扩展BeanFactory,ApplicationContext提供了更堵的扩展功能一、设置路径配置文件路径可以以数组的方式传入,解析及功能实现都在refresh()中实现多配置文件,同时支持系统变量二、扩展功能2.1、初始化前的准备工作,例如对系统属性或者环境变量就行准备和验证2.2、初始化BeanFactory,并进行X...原创 2018-06-25 09:11:28 · 741 阅读 · 0 评论 -
bean标签的解析及注册-registerBeanDefinition
1、注册DefaultBeanDefinitionDocumentReader类下的processBeanDefinition方法里面的BeanDefinitionReaderUtils.registerBeanDefinition解析2、BeanDefinitionReaderUtils下面的registerBeanDefinition用于注册bean第一步使用beanName作为标识注册第二步...原创 2018-06-15 09:06:01 · 11206 阅读 · 0 评论 -
bean标签的解析及注册——BeanDefinitionHolder
1、默认标签的解析在parseBeanDefinitions(root, this.delegate),主要对import、alias、bean、beans进行不同的处理2、bean标签解析bean解析最为复杂2.1、解析通过BeanDefinitionParserDelegate的parseBeanDefinitionElement进行元素解析,并返回BeanDefinitionHolder,通...原创 2018-06-08 09:11:59 · 3099 阅读 · 0 评论 -
bean的加载-获取单例和准备创建bean
1、获取单例如果缓存中不存在已经加载的单例bean,就需要重头开始bean的加载过程,在spring中AbstracBeanFactory的 getSingleton的重载方法实现了bean的加载1.1、检查缓存是否已经加载过,spring3.2是直接使用synchronized锁定需要同步的变量,4.0之后Object singletonObject = this.singletonObject...原创 2018-06-22 09:00:09 · 821 阅读 · 0 评论 -
bean标签的解析及注册-BeanDefintion
1、介绍BeanDefintion是一个接口,主要有三种实现ChildBeanDefinition(子bean)、GenericBeanDefinition(创建实例)、RootBeanDefinition(父bean)1.2、创建实例GenericBeanDefinition代码createBeanDefinition作用就是实现该功能1.3、createBeanDefinition创建承载属性...原创 2018-06-14 09:34:34 · 720 阅读 · 0 评论 -
解析及注册BeanDefinitions
1、前置XmlBeanFactory解析文件转换成Document后,然后提取及注册bean2、核心逻辑解析以前的版本处理profile属性、处理解析是在这个类里面进行处理,现在交给doRegisterBeanDefinitions(Element root)来做3、解析bean在解析完xml后,开始解析bean4、bean处理...原创 2018-06-07 08:54:49 · 824 阅读 · 0 评论 -
spring创建事物
TransactionAspectSupport类里面的createTransactionIfNecessary方法用于创建事物1、使用DelegatingTransactionAttribute封装传入的TransactionAttribute实例用于提供更多的功能2、获取事物事物处理当然是以事物为核心,获取事物就是最重要的事情2.1、获取事物创建对应的事物实例,这里使用的是DataSource...原创 2018-07-09 09:11:04 · 1049 阅读 · 0 评论