Spring源码解读

Spring Framework源码地址:https://github.com/spring-projects/spring-framework

从目录结构可以看出整个Spring框架都遵从模块化设计的思路,总共分为20多个模块,如下图所示:

从上图可以看出:

Spring主要分为五个部分:

1、测试模块:主要实现了Spring的Junit等测试框架。

2、Spring核心容器:里面都是Spring框架实现的基础,主要包括了spring-beans、spring-core、spring-context等三个核心基础模块。

3、Spring Data模块:主要实现了包括Spring支持各种ORM框架,如JDBC Template、JPA、mybatis等的集成;还包括了Spring集成Marshalling XML的处理模块;以及对Spring包括声明式与编程式事务的支持。

4、Spring核心功能扩展模块:主要在Spring核心模块的基础上,实现了包括AOP、对象绑定、i18n、类型转换、事件、消息等框架机制的支持。

5、Spring Web模块:主要实现了Spring对Web的支持,如SpringMvc、Webservice等的支持。

 

从上面的分析可以看出,Spring容器的所有实现都基于Spring核心模块的实现,所以下文我主要基于Spring核心模块的核心代码实现做分析:

  • spring-beans模块:

 spring-beans模块提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。

下图是BeanFactory的层次结构如下:

从上图可以看出:BeanFactory为顶层的工厂接口,定义了获取单个Bean实例特征的方法,其下有Spring对于Jndi类型的Bean工厂的直接实现;AutowireCapableBeanFactory 定义了自动装载Bean一系列接口,为Spring容器实现自动装载功能提供支持;HierarchicalBeanFactory为BeanFactory提供层级关系,一个应用中可以存在多个BeanFactory,该类即为多个BeanFactory提供了层级关系,定义了获取父BeanFactory与当前层次BeanFactory是否包含某个Bean实例的方法;ListableBeanFactory定义了获取Spring容器中所有某类(全部)Bean实例的方法。

AutowireCapableBeanFactory层次结构图如下:

AbstractAutowireCapableBeanFactory提供了可自动装配的Bean Factory的默认实现;DefaultListableBeanFactory为可自动装载的ConfigurableListableBeanFactory实现,该BeanFactory既满足可列出所有Bean的同时,又可以实现自动装配;XmlBeanFactory为Spring容器提供的从xml文件中读取BeanDefinition为DefaultListableBeanFactory的一种实现,目前在Spring Framework的最新版本中已不推荐使用。其中HierarchicalBeanFactory和ListableBeanFactory的实现关系与AutowireCapableBeanFactory相类似,最终,DefaultListableBeanFactory同时实现了三种类型的BeanFactory的接口。所以,下文主要以DefaultListableBeanFactory为例做Spring BeanFactory的实现分析:

从上图可以看出:DefaultListableBeanFactory中以线程安全ConcurrentHashMap容器存储了Spring容器中所有Bean的定义与beanName的键值对与缓存了单例的Bean实例,以此来实现满足三种条件的BeanFactory;Spring获取Bean实例时首先会从缓存中去取bean实例,如果取不到,则创建实例,下面主要分析BeanFactory创建Bean实例的方法:

	protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)
			throws BeanCreationException {

		// Instantiate the bean.
		BeanWrapper instanceWrapper = null;
		if (mbd.isSingleton()) {
			instanceWrapper = this.factoryBeanInstanceCache.
  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值