zoukankan      html  css  js  c++  java
  • spring架构

      Spring架构是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块:

     1, core container

    core container核心容器包含有core,beans,context和Expression Language模块。core和beans是框架的基础部分,提供控制反转和依赖注入的特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正的允许你从逻辑中分离出依赖关系和配置。

      core模块:主要包含Spring框架基本的核心工具类,Spring中的其他组件都要使用到这个包里面的类,core模块是其他组件的基本核心。

      beans模块:该模块是 所以应用都要用到的,它包含访问配置文件,创建和隔离bean以及进行Inversion of control/Dependency Injection 即IOC和DI操作相关的所有类。

      context模块:该模块构建于core和beans模块基础之上,提供了一种类似于JNDI注册器的框架式的对象访问法。Context模块基础了beans的特性,为Spring核心提供了大量扩展,添加了对国际化(例如资源绑定),事件传播,资源加载和对Context的透明创建的支持,同时也支持J2EE的一些特性,如EJB,JMX和基础的远程处理。ApplicationContext接口是Context模块的关键。

      Expression Language模块:提供了一个强大的表达式语言用于在运行时查询和操作对象。它是JSP2.1规范中定义的unifed expression language的一个扩展。该语言支持设置/获取属性,属性的分配,方法的调用,访问数组上下文(accessiong the context of arrays),容器和索引器,逻辑和算术运算符,命令变量以及从Spring IOC容器中根据名称检索对象。它也支持LIST投影,选择和一般的list聚合。

    2. Data Access/Integration

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

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

      ORM模块:ORM模块为流行的对象-关系映射API,如JPA,JDO,Hibernate,mybatis等,提供了一个交互层。利用ORM封装包,可以混合使用Spring提供的特性进行O/R映射。如简单声明性事务管理。

      OXM模块:OXM提供了一个对Object/XML映射实现的抽象层,OXM实现包括JAXB,Caster,XMLBeans,JiBX和XStream。

      JMS模块:Java messaging Service,主要包含了一些制造和消费消息的特性。

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

    3. Web

    web上下文模块建立在应用程序上下文模块之上,为基于web的应用程序提供了上下文,所以Spring框架支持Struts的集成,Web模块还简化了处理部分请求以及将请求参数绑定到域对象的工作。Web模块包含了Web,Web-servlet,Web-Struts和Web-Porlet模块。

      Web模块:提供了基础的面向web的集成特性,例如:多文件上传,使用Servlet Listeners初始化IOC容器以及一个面向Web的应用上下文。它还包含Spring远程支持中Web的相关部分。

      Web-Servlet模块:Spring MVC。

      Web-Struts模块:对Struts的支持。

      Web-Porlet模块:对Portlet环境和Spring MVC的实现。 

    4. AOP

    AOP模块提供了一个AOP联盟标准的面向切面编程的实现,它可以让你定义如方法拦截器和切点,从而将不同的逻辑代码分开,从而降低代码之间的耦合性,利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中。这有点像.NET中的attribute技术。

      通过配置管理特性,SpringAOP模块直接将面向切面编程集成到了Spring框架中,所以可以很容易的使Spring框架管理的任何对象支持AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。

      Aspects模块提供了对AspectsJ的集成支持。

      Instrumentation模块提供了class instrumentation支持和classloader实现,使得可以在特定的应用服务器上使用。

    5.Test  Test模块支持使用JUnit和TestNG对Spring组件进行测试。

    一, 容器的基本实现

      在Spring中bean是最核心的东西,因为Spring就像一个大水桶,而bean就是水桶中的水,所以如果没有水,那么水桶也就没有存在的必要了,所以Spring容器的基本用法就是定义bean,从容器中获得bean,而获取bean可以从最简单的BeanFactory中获取,但是实际上从BeanFactory中直接获取bean是很少使用的,甚至是不常见的,因为企业级应用中大都会使用ApplicationContext容器。

      BeanFactory = new XmlBeanFactory(new classpathResource(“*.xml”));BeanFactory.do();

      上面就是使用BeanFactory最简单的实现,那么从上面的代码中我们分析下Spring究竟做了什么?

      1.读取配置文件  2.根据配置文件找到对应的类  3.调用实例化的类 

      根据上面的三个步骤,可以确定Spring至少需要三个类才能完成以上步骤的实现。

      1. ConfigReader:用于读取及验证配置文件,并放在内存中。

      2. ReflectionUtil:用于根据配置文件类进行反射实例化对象。

      3. APP:支持整个逻辑的执行。

    在Spring源码中实现上述三个步骤的jar包是beans.jar当然core.jar是必须的,如果只是实现上面的三个步骤,那么其他的模块可以不用导入。

    和心类的介绍:

      1.DefaultListableBeanFactory

        XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,这个类是整个bean加载的核心部分,是Spring注册以及加载bean的默认实现,而对于DefaultListableBeanFactory和XmlBeanFactory不同的地方其实是在XmlBeanFactory使用了自定义的Xml读取器XmlBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取。DefaultListableBeanFactory集成了AbstractAutowireCapableBeanFactory并实现了BeanDefinitionRegistry接口。

    1 public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable
    1 public interface BeanDefinitionRegistry extends AliasRegistry
    1 public interface ConfigurableListableBeanFactory extends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory
    1 public interface ListableBeanFactory extends BeanFactory
    1 public interface AutowireCapableBeanFactory extends BeanFactory
    1 public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, SingletonBeanRegistry
    1 public interface HierarchicalBeanFactory extends BeanFactory
    1 public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFactory implements AutowireCapableBeanFactory 
    1 public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport implements ConfigurableBeanFactory
    1 public abstract class FactoryBeanRegistrySupport extends DefaultSingletonBeanRegistry
    1 public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry
    1 public class SimpleAliasRegistry implements AliasRegistry 

    loading。。。  

  • 相关阅读:
    SQL Server 的事务和锁 图解
    pxc 集群
    Supported_Hardware#4G_LTE_cards_and_modems
    手机性能天梯图
    无线上网卡制式
    python源码学习
    SQLSERVER里面RR隔离级别没有GAP锁
    JAVA EE 博客实例
    REDIS 配制
    SQL SERVER 函数与SQL语法
  • 原文地址:https://www.cnblogs.com/YsirSun/p/12748426.html
Copyright © 2011-2022 走看看