Spring笔记001 Spring容器的基本实现—— Spring的结构组成

目录

 

容器基本用法

 

功能分析

测试代码

分析

Spring的结构组成

beans包的层级结构

核心类介绍

DefaultListableBeanFactory

XmlBeanDefinitionReader


 

容器基本用法

先写一个简单的Bean(一个简单的Java类)

public class MyTestBean { 
    prvate String testStr = "testStr";
    public String getTestStr () { 
        return testStr; 
    }
    public void setTestStr(Str ng testStr) { 
        this . testStr = testStr; 
    }
}

然后是相关的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop-2.0.xsd
			http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

	<bean id="autowired" class="bean.MyTestBean"/>

</beans>

最后来一段测试代码

@SuppressWarnings("deprecation")
public class BeanFactoryTest ( 
    @Test 
    public vo testSirnpleLoad(){

        //读取配置文件    beanFactoryTest.xml
        BeanFactory bf = new XmlBeanFactory (new ClassPathResource("beanFactoryTest "));
        //根据    beanFactoryTest.xml    中的配置找到对应的类的配置,并实例化
        MyTestBean bean=(MyTestBean) bf.getBean("myTestBean");
        //调用实例化后的实例
        assertEquals("testStr",bean getTestStr());
    
}

 

功能分析

测试代码

  1. 读取配置文件    beanFactoryTest.xml
  2. 根据    beanFactoryTest.xml    中的配置找到对应的类的配置,并实例化
  3. 调用实例化后的实例

分析

如果要想完成我们预想的功能,至少需要3个类。

  • ConfigReader:用于读取以及验证配置文件。
  • ReflectUtil:用于更具配置文件中的配置惊醒反射实例化。(更具上面的xml配置,对MyTestBean进行实例化)
  • App:用于串联整个逻辑的串联。

(无需在意这三个类应该叫什么名,哪怕是起名ABCD都不要紧,重点是     功能   )

最简单的Spring功能架构

 

 

 

Spring的结构组成

我们首先尝试梳理Spring的框架结构,从全局的角度了解Spring的结构组成

beans包的层级结构

这里截取了5.2的图

  • src/main/j ava            用于展现 Spring 的主要逻辑
  • src/main/resources 用于存放系统的配置文件
  • src/test/j ava            用于对主要逻辑进行单元测试
  • src/test/resources   用于存放测试用的配置文件
  • src/test/ testfixture   测试夹具     暂不清楚是做什么用途的,网上搜出来的内容基本跟Python测试相关,详细的内容可以看看这个链接

https://blog.csdn.net/AndroidO2O/article/details/84031077

 

Spring     Beans层级架构

 

核心类介绍

通过对beans工程的结构介绍,我们现在对beans的工程结构有了初步的认识,但是再正式开始源码分析之前,有必要了解Spring中核心的两个类。

DefaultListableBeanFactory

XmlBeanFactory 继承自 DefaultListableBeanFactory ,而 DefaultListableBeanFactory 是整个bean记载的核心部分,是Spring注册及加载 bean的默认实现。

XmlBeanFactory 与 DefaultListableBeanFactory 不同的地方在于  XmlBeanFactory 中使用了自定义的XML读取器(XmlBeanDefinitionReader),实现了个性化的BeanDefinitionReader读取。

DefaultListableBeanFactory 继承了 AbstractAutowireCapableBeanFactory ,并且实现了 ConfigurableListableBeanFactory 和 BeanDefinitionRegistry 

下面插入一张容器加载相关类图,标红部分是上面文字中提到的相关类:

容器加载相关类图

 

从上面的容器加载类图,可以从全局角度了解 DefaulatListableBeanFactory 的脉络。

下面是对其他一些类的功能说明:

  • AliasRegistry:定义 alias 的简单增删改查等操作。
  • SimpleAliasRegistry:主要使用map作为alias的缓存,并对接口AliasRegistry进行实现。
  • SingletonBeanRegistry:定义对单例的注册及获取。
  • BeanFactory:定义获取bean及bean的各种属性。
  • DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry各函数的实现。
  • HierarchicalBeanFactory:继承BeanFactory,也就是再BeanFactory定义的功能的基础上增加了对parentFactory的支持。
  • BeanDefinitionRegistry:定义对BeanDefinition的各种增删改操。
  • FactoryBeanRegistrySupport :再在DefaultSingletonBeanRegistry基础上增加了对FactoryBean的特殊处理功能。
  • ConfigurableBeanFactory:提供配置Factory的各种方法。
  • ListableBeanFactory:根据各种条件获取bean的配置清单。
  • AbstractBeanFactory:综合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能
  • AutowireCapableBeanFactory:提供创建bean、自动注入、初始化以及应用bean的后处理器。
  • AbstractAutowireCapab eBeanFactory:综合AbstractBeanFactory并对接口AutowireCapableBeanFactory进行实现。
  • ConfigurableListableBeanFactory:BeanFactory配置清单,指定忽略类型及接口等。
  • DefaultListableBeanFactory:综合上面所有功能,主要是对bean注册后的处理。
 

XmlBeanFactory在3.1以后已经被废弃,不再推荐使用,不知道书里为什么讲这个,咱们先往下面看,以后再回来填这个坑,找了一些分析废弃原因的帖子,可以了解一下https://www.cnblogs.com/xlecho/p/14673388.html

XmlBeanFactory 对 DefaulatListableBeanFactory  类进行了扩展,主要用于从XML文档中读取BeanDefinition,对于注册和获取bean都是使用父类  DefaulatListableBeanFactory 的方法去实现,而唯独与父类不同的个性化实现就是增加了 XmlBeanDefinitionReader 类型的reader属性属性。在XmlBeanFactory 中主要使用reader属性对资源文件进行读取和注册。

XmlBeanDefinitionReader

XML配置文件的读取是Spring中重要的功能,因为Spring的大部分功能都是以配置作为切入点的,那么我们可以从XmlBeanDefinitionReader 中梳理一下资源读取、解析及注册的大致脉络,首先我们看看各个类的功能

等下搜一篇帖子详细看一下,书中的类图与idea中的类图差别有点大

配置文件读取相关类图

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值