spring的整体架构分析一

1.spring框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块。

这些模块被总结为以下几个部分。

(1)Core Container

       Core Container(核心容器)包含有Core、Beans、Context和Expression Language模块。

       Core和Beans模块是框架的基础部分,提供IOC(控制反转)和依赖注入特性。这里的基础概念是BeanFactory,它提供了Factory模式的经典实现来消除对程序性单例模式的需要,并真正的允许你从程序逻辑中分离出依赖关系和配置。

       Core模块主要包含spring框架基本的核心工具类,spring的其他组件都要使用到这个包里的类,core模块是其他组件的基本核心。当然你也可以在自己的应用系统中使用这些工具类

      Beans模块是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control/ Dependency Injection操作相关的所有类。

      Context模块构建于Core和Beans模块基础之上,提供了一种类似于JNDI注册器的框架式的对象访问方法。Context模块继承了Beans的特性,为了spring核心提供了大量扩展,添加了对国际化、时间传播、资源加载个对Context的透明创建的支持。ApplicationContext接口是Context模块的关键。

      Expression Language模块提供了一个强大的表达式语言用于在运行时查询和操纵对象。该语言支持设置/获取属性的值,属性的分配,方法的调用,访问数组上下文、容器和索引器、逻辑和算术运算符以及从spring的IOC容器中根据名称检索对象。

(2) Data Access/Integration

          Data Access/Integration层包含有JDBC、ORM、OXM、JMS和Transaction模块。

         JDBC模块提供了一个JDBC抽象层,它可以消除冗长的JDBC编码和解析数据库厂商特有的错误代码。这个模块包含了spring对JDBC数据访问进行封装的所有类。

         ORM:利用ORM封装包,可以混合使用所有Spring提供的特性进行O/R映射。

    OXM:提供了一个对Object/XMl映射实现的抽象层。

         JMS:提供了一些制造和消费消息的特性。

         Transaction:支持编程和生命性的事务管理,这些事务类必须实现特定的接口,并且对所有的POJO都适用。

 接下来开始分析这行代码spring做了哪些事情

     BeanFactory  bf = new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml"))

  首先来分析它的运行时序,第一步:new ClassPathResource(“bean.....”)

     在java中,将不同来源的资源抽象成URL,通过注册不同的handler来处理不同来源的资源的读取逻辑,一般handler的类型使用不同前缀来识别,如“file:”、“http:”、“jar:”等,然而URL没有默认定义相对ClassPath或servletContext等资源的handler。因而spring对其内部使用到的资源实现了自己的抽象结构:Resource接口来封装底层资源。

 首先,它定义了3个判断当前资源状态的方法:存在性(exists)、可读性(isReadable)、是否处于打开状态(isOpen)。另外,Resource接口还提供了不同资源到URL、URI、File类型的转换,以及获取lastModified属性、文件名,resouce还提供了基于当前资源创建一个相对资源的方法:CreateRelative()。在错误处理中需要详细的打印出错的资源文件,因而Resource还提供了getDescription()方法用于在错误处理中打印信息。

原文地址:https://www.cnblogs.com/woniufei/p/9642361.html