【Spring源码深度解析学习系列】注册解析的BeanDefinition(五)
对于配置文件,解析和装饰完成之后,对于得到的beanDefinition已经可以满足后续的使用要求了,还剩下注册,也就是processBeanDefinition函数中的BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder,getReaderContext().getRegistry())代码的解析了。
public static void registerBeanDefinition(
BeanDefinitionHolder definitionHolder, BeanDefinitionRegistry registry)
throws BeanDefinitionStoreException {
//使用beanName做唯一标识注册
// Register bean definition under primary name.
String beanName = definitionHolder.getBeanName();
registry.registerBeanDefinition(beanName, definitionHolder.getBeanDefinition());
//注册所有的别名
// Register aliases for bean name, if any.
String[] aliases = definitionHolder.getAliases();
if (aliases != null) {
for (String alias : aliases) {
registry.registerAlias(beanName, alias);
}
}
}
一、通过beanName注册BeanDefinition
对于beanDefinition的注册的处理步骤:
1、对AbstractBeanDefinition的校验,在解析XML文件的时候我们提过校验,但是此校验非彼校验,之前的校验是针对于XML格式的校验,而此时的校验是针对AbstractBeanDefinition的methodOverrides属性的。
2、对beanName已经注册的情况的处理,如果设置了不允许bean的覆盖,则需要抛出异常,否陈直接覆盖
3、加入map缓存
4、清除解析之前留下的对应beanName的缓存
二、通过别名注册BeanDefinition
别名注册的步骤如下:
1、alias与beanName相同情况处理,若alias与beanName并名称相同则不需要处理并删除原有的alias
2、alias覆盖处理。若aliasName已经使用并已经指向了另一beanName则需要用户的设置进行处理
3、alias循环检查,当A->B存在时,若再次出现A->C->B时候则会抛出异常。
【Spring源码深度解析学习系列】注册解析的BeanDefinition(五)的更多相关文章
- Spring源码分析(十)注册解析的BeanDefinition
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 对配置文件解析完成后,获取的beanDefiniton已经可以进行使用了 ...
- Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE
Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE
- spring源码深度解析— IOC 之 开启 bean 的加载
概述 前面我们已经分析了spring对于xml配置文件的解析,将分析的信息组装成 BeanDefinition,并将其保存注册到相应的 BeanDefinitionRegistry 中.至此,Spri ...
- spring源码深度解析— IOC 之 容器的基本实现
概述 上一篇我们搭建完Spring源码阅读环境,spring源码深度解析—Spring的整体架构和环境搭建 这篇我们开始真正的阅读Spring的源码,分析spring的源码之前我们先来简单回顾下spr ...
- spring源码深度解析— IOC 之 默认标签解析(上)
概述 接前两篇文章 spring源码深度解析—Spring的整体架构和环境搭建 和 spring源码深度解析— IOC 之 容器的基本实现 本文主要研究Spring标签的解析,Spring的标签 ...
- spring源码深度解析— IOC 之 默认标签解析(下)
在spring源码深度解析— IOC 之 默认标签解析(上)中我们已经完成了从xml配置文件到BeanDefinition的转换,转换后的实例是GenericBeanDefinition的实例.本文主 ...
- Spring源码深度解析之Spring MVC
Spring源码深度解析之Spring MVC Spring框架提供了构建Web应用程序的全功能MVC模块.通过策略接口,Spring框架是高度可配置的,而且支持多种视图技术,例如JavaServer ...
- Spring源码深度解析之事务
Spring源码深度解析之事务 目录 一.JDBC方式下的事务使用示例 (1)创建数据表结构 (2)创建对应数据表的PO (3)创建表和实体之间的映射 (4)创建数据操作接口 (5)创建数据操作接口实 ...
- Spring源码深度解析之数据库连接JDBC
Spring源码深度解析之数据库连接JDBC JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...
- Spring源码情操陶冶-自定义节点的解析
本文承接前文Spring源码情操陶冶-DefaultBeanDefinitionDocumentReader#parseBeanDefinitions,特开辟出一块新地来啃啃这块有意思的骨头 自定义节 ...
随机推荐
- (转)解决Win7/8硬盘占用高方案汇总
写在前面 在Windows7时代,很少人会抱怨硬盘占用率高的问题.但是到了Windows7/8.1时,硬盘占用率成为一个扰人的问题.硬盘占用率经常100%会导致系统卡.慢,而且也很伤硬 ...
- ZooKeeper在分布式应用中的作用
作者:陈叶皓(携程邮轮研发部软件架构师) 是不是要在标题的“作用”之前加上“重要”两个字,我犹豫了一下,zookeeper提供的功能是如此的重要,以至于如果你在应用中不使用它,早晚也会在你的应用中去实 ...
- 每天一个linux命令: /etc/group文件详解
Linux /etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件.linux /etc/group文件是有关于系统管理员对用户 ...
- java-信息安全(三)-PBE加密算法
概述 信息安全基本概念: PBE算法(Password Based Encryption,基于口令加密) PBE PBE算法(Password Based Encryption,基于口令加密)是一种基 ...
- 同一个Tomcat部署两个project之间的通信问题
同一个tomcat下的两个project是无法通信的. 同一个tomcat中的project能互相调用吗 启动一个tomcat部署多个项目,那么每个项目算是一个线程还是进程呢? Tomcat中的pro ...
- [ROM]HTC ThunderBolt 4.0.4 刷机教程
Z大原帖:http://www.in189.com/thread-754076-1-1.html 精简版:http://www.in189.com/thread-807796-1-1.html 下载地 ...
- man 转 pdf _____ jpg 转 pdf
man -t bash | ps2pdf - bash.pdf 将jpeg转成pdf convert *.jpeg images.pdf 将pdf转成jpeg gs -dBATCH -dNOPAUSE ...
- SSM是什么框架?
SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统. 1.Spring简介 ...
- MVC學習網站
http://www.cnblogs.com/haogj/archive/2011/11/23/2246032.html
- Spring踩坑记录
1. Spring properties配置项不能解析问题 本地部分配置文件迁到disconf,希望disconf的配置文件交由spring托管.这样的话,原有代码中引用配置的地方就不用变(还是用${ ...