Spring学习之Spring的整体架构

    刚刚毕业找了一份不算安逸不算忙碌的工作,忙的时候很忙,有的时候从早上一直忙到深夜12点,与其说是忙,不如说是被安排的任务没有及时完成,断断续续1个月终于完成了项目模块的任务。说实话,工作前后心里的落差有点大,工作之前,以为能够学到很多实用的技术,工作之后,老板并不在乎你的过程,只在乎你的结果。有的时候遇到一些难题,直接都是copy,自几很少能够静下心来好好学习别人的代码。一昧的复制,粘贴。能够多省事就省事,我不知道是不是自己变懒了,甘于堕落了。。。总之心里很迷茫,对于未来不知道何去何从。废话说了这么多,还是好好学习吧。

1.spring的整体架构

        Spring架构是一个分层架构,它包含很多模块,大致被分为20多个模块。如图1-1所示:


图1-1

这些模块大致分为以下几部分。
(1)Core Container(核心容器)
 Core Containere的主要内容在图中都已经显示了,这里主要注意Beans和core这俩个模块,这俩个模块是Spring框架的基础部分,我们熟知的IOC(控制反转)/DI(依赖注入)的特性就是这俩个模块提供的,所以学习spring框架的基础便是学习beans和core这俩个模块。这里还有一个概念BeanFactory,BeanFactoy消除了程序性单列模式的需要,并真正允许你从逻辑中分离出依赖关系和配置。
(2)Data Access/Integration(数据访问继承)
(3)Web
(4)Aop
(5)Test
其他的暂时我们只是需要了解一下就可以了。

1.1容器的基本用法

一个简单的javaBean
public class TestBean{
private String name;
public TestBean(){
this.name="Hello,Spring";
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}

}

很普通没有什么特别之处,普通的不能再普通。
好吧我们来看一下xml的定义。
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
     xmlns="http://www.springframework.org/schema/beans"  
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">   

  <bean id="TestBean" class="Bean.TestBean"></bean>
</beans> 



很普通没有什么特别之处,普通的不能再普通。
好吧我们来看一下测试代码。
@SuppressWarnings("deprecation")
public class BeanFactoryTest{
@Test
public void testLoad(){
BeanFactory bf=new xmlBeanFactory(new classPathResource("beanFatoryTest.xml"));
TestBean tb=bf.getBean("TestBean");
assertEquals("hello,Spring",tb.getName());
}

}
聪明的读者会很快看到我们期望的结果,在测试栏中显示了red Bar.
直接使用BeanFactor作为容器对于Spring的使用来说并不多见,因为企业大部分用的都是ApplicationContext,我也不知道俩者的差别是什么,书上就是这么说的,他说到后面会告诉我,那就先放一下。

1.2功能分析

现在我们来分析一下测试代码的功能,干货来了。。上面这段代码主要执行了一下几个功能。
(1)读取配置文件
(2)获取实例
(3)调用
要完成以上几个功能又需要一下几个类。
(1)ConfigReader  看名字都知道是读取配置文件的
(2)ReflectionUtil 看名字就知道是反射的工具类。就是获取实例的。
(3)App:说是串联整个逻辑的鬼知道是干什么用的。就把她当做一根绳子,把这些散落的模块串联起来。
到这里也没什么复杂的吗确实,但是还没有结束啊,continue.
在继续分析之前先介绍一下Spring中最核心的俩个类我叫它大D和大X。
大D全名是DefaultListableBeanFactory(默认的列表工厂--)上面代码中的xmlBeanFactory就是继承的大D,大D是整个bean加载的核心部分。是spring注册及加载bean的一个默认实现,而对于xmlBeanFactory与大D不同的地方是前者使用了自定义的读取器xmlBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取,说白了就是私人订制的,一般人没那特权。而大D是继承了一个抽象类AbstractAutoWireCapableBeanFactory并且实现了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口,下面看一下 ConfigurableListableBeanFactory的相关类图。如图1-2所示


图1-2
  • BeanFactory 定义了获取bean以及bean的各种属性
  • HierarchicalBeanFactory 增加了对父类ParentBeanFactory的定义
  • ConfigurableBeanFactory 定义了各种beanfactory的配置操作
  • AutowireCapableBeanFactory 定义了自动注入、初始化、以及bean的后置处理
  • ListableBeanFactory 根据条件获取bean的相关配置信息
  • ConfigurableListableBeanFactory beanfactory的配置清单,并且定义了忽略类型以及接口
  • SingletonBeanRegistry 定义了对单例的注册和获取
  • AliasRegistry定义了对别名(alias)的注册,删除,判断,获取
  • SimpleAliasRegistry  主要使用Map作为Alias的缓存,并且对接口AliasRegistry进行实现
  • DefaultSingletonBeanRegistry 对接口singletonBeanRegistry接口的实现
  • FactoryBeanRegistrySupport   在DefaultSionletonBeanRegistry上面增加了对beanFactory的特殊功能处理
  • AbstractBean Factory综合了FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能
  • AbstractAutowireCapableBeanFactory 综合了AbstractBeanFactory并且对接口AutowireCapableBeanFactory进行了实现。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值