zoukankan      html  css  js  c++  java
  • Spring 简介

    计应134班(实验班) 陈兴

    一,Spring简介 
    Spring的特点: 
    1, Spring不同于其他的Framework,它要提供的是一种管理你的业务对象的方法。 
    2, Spring有分层的体系结构,意味着你能选择仅仅使用它的任何一个独立的部分,而其他的仍然使用你的相关实现。 
    3, 它的设计从一开始就是要帮助你编写易于测试的代码,Spring是使用测试驱动开发(TDD)的工程的理想框架。 
    4, Spring不会给你的工程添加对其他的框架依赖;同时Spring又可以称得上是个一揽子解决方案,提供了一个典型应用所需要的大部分基础架构。

    Spring的好处: 
    1, Spring能有效地组织你的中间层对象;(*) 
    2, Spring能消除在许多工程中常见的对Singleton的过多使用; 
    3, 通过一种在不同应用程序和项目间一致的方法来处理配置文件,消除各种自定义格式的属性文件的需要,仅仅需要看看类的JavaBean属性。Inversion of Control的使用帮助完成了这种简化;(使用的是type2的IoC) 
    4, 能够很容易培养你面向接口而不是面向类的编程习惯。(这也算。。。) 
    5, Spring的设计会让使用它创建的应用尽可能少的依赖于它的APIs,在Spring应用中的大多数业务对象没有依赖于Spring。 
    6, 使用Spring构建的应用程序易于单元测试; 
    7, Spring使EJB成为一个实现选择,而不是必需的选择。你可以用POJOs或local EJBs来实现业务接口,却不会影响到调用代码。 
    8, Spring提供一些web应用上的EJB的替代方案,比如用AOP提供声明性事务管理; 
    9, Spring为数据存取提供了一个一致的框架,不论是使用JDBC还是O/R mapping的产品(Hibernate,JDO)。

    Spring的任务描述: 
    Spring的主要目的就是使J2EE易用和促进良好的编程习惯。 
    Spring 不会重新发明轮子,它是让已有的技术更加易用,比如它没有底层事务协调处理,但是提供了一个抽象层覆盖了JTA和任何其他的事物策略。Spring并没有 和其他的开源项目竞争,不过还是在一些领域有新的方案提供,比如它的web framework,轻量级的IoC容器和AOP框架。


    二,Inversion of Control容器 
    Spring的设计核心是org.springframework.beans包,用来协调JavaBeans的工作。这个包一般不会被用户直接使用,而是作为其他功能的基础服务。 
    下一个高一些的抽象概念是Bean Factory,一个Spring bean factory是一个可以通过名称来获取objects的通用工厂,并且管理objects之间的关系。 
    Bean factories支持两种对象模式: 
    Singleton:默认的,最常使用的,对于无状态的对象是一种理想的模式。 
    Prototype:每次获取将创建一个独立的对象,可以让用户拥有他们自己的对象。

    由于org.springframework.beans.factory.BeanFactory是一个简单的接口,所以你能够方便地实现出你自己的BeanFactory,但是很少用户需要这样做;常用的BeanFactory定义是: 
    XmlBeanFactory:解析简单直观的定义类和命名对象属性的XML结构; 
    ListableBeanFactoryImpl:提供了解析存放在属性文件中的bean定义的能力;

    通 过BeanFactory的概念,Spring成为了一个Inversion of Control容器。IoC背后的概念就是所谓的Hollywood原则:Don’t call me, I ‘ll call you。IoC将控制创建的职责从对象的代码中搬进了框架中,使用IoC容器只需指出组件需要X对象,在运行期容器会提供给它具体的对象。而容器就是通过 查看方法的参数表(例如JavaBean的属性),或者通过配置源(XML)来得到相应的信息,从而实现向组件提供对象

    Spring ApplicationContext是BeanFactory的子接口,为下列东西提供支持: 
    信息查找,支持国际化 
    事件机制,允许发布应用程序以及可选的注册已接受到事件 
    可移植的文件和资源访问


    三,JDBC抽象和数据访问异常层次 
    JDBC提供了不错的数据库抽象,但是也有痛苦的地方: 
    需要大量的错误处理代码来确保ResultSet,Statement,Connection在使用后关闭; 
    没有异常的层次,使用SQLException来响应所有的错误,并不知道具体错在哪里。 
    Spring用两种方法解决这些问题: 
    通过API把冗长易出错的异常处理代码从程序转移到框架中,框架处理所有异常,而程序代码集中精力进行SQL和处理结果上; 
    为要处理SQLException的程序代码提供有意义的异常层次。当Spring第一次从数据源取得一个连接时,它检查元数据以确定数据库,随后它使用这些信息把SQLException映射为自己的异常层次中的响应的异常,是你可以和有意义的异常打交道。

    Spring提供两层JDBC API,第一个在org.springframework.jdbc.core包中,使用回调机制移动控制权从程序转移到了框架中,这是一种不同的Inversion of Control。 
    在org.springframework.jdbc.object 包中是对JDBC的更高层次的抽象。这是建立在核心的JDBC回调功能基础之上的,但是提供了一个能够对RDBMS操作的API,在这个API中无论是查 询,更新或是存储过程,都是用Java对象来建模。这组API受到了JDO查询API的影响,非常直接而且有用。

    Spring数据访问异常层次是基于unchecked exception的,这样开发者可以自己决定是否来捕捉这些异常从而恢复。

    Spring JDBC对你带来的好处: 
    你不必像JDBC那样写finally; 
    你需要编写的代码变少了; 
    你不必钻研RDBMS文档去解决理解,一个因为错误的列名而返回的诡异错误码; 
    不管你使用何种持久化技术,你都可以方便地实现DAO模式,让业务代码不依赖于任何特定的数据访问API。


    四,O/R mapping集成 
    Spring提供了对Hibernate 2.x和JDO的集成支持,尤其是对Hibernate的集成。 
    为什么要使用Hibernate+Spring,而不是直接使用Hibernate呢? 
    1, 用Hibernate的代码通常需要为了效率和适当的事务处理而使用相同的Session对象;Spring通过在代码层上使用显式的template包 装类或者使用声明式的,AOP的方法拦截(interceptor)方式两种方案,使得能够很容易透明地创建和绑定Session到当前的线程。 
    2, 资源管理,Spring的应用程序context能够处理Hibernate SessionFactories的位置和配置,JDBC数据源和其他的相关资源;使得易于管理和改变。 
    3, 集成的事务管理 Spring让你能够把你的Hibernate代码包装起来,通过2种方式:在代码层上使用显式的template包装类,或者使用声明式的,AOP的方法拦截(interceptor)。 
    4, Spring能够包装Hibernate异常,把它们从私有的,checked异常转换为一套抽象的运行时异常;使得你能够在任何你需要的地方捕捉和处理异常,并且JDBC异常也被转换到相同的层次中,意味着你能在一致的编程模型中对JDBC执行相同的操作。 
    5, 为了避免和厂商绑定 Hibernate强大,灵活,免费,当时仍然使用私有的API;Spring对Hibernate的事务和异常的抽象,使你很容易将Hibernate -specific代码隔离开你的应用程序部分,而不会影响Hibernate的强大功能。 
    6, 测试简单 Spring的IoC使它很容易改变Hibernate session factories的位置,数据源,事务管理和映射对象执行,这使得很容易隔离和测试每一块持久关系代码。

    五,事务管理 
    JTA使一个直接用起来很笨重的API,许多J2EE开发者感到EJB CMT使对于事务管理的唯一合理的选择。 
    Spring提供了它对事务管理的抽象,提供了: 
    1, 通过类似于JdbcTemplate的回调模板编程管理事务,比起直接用JTA容易多; 
    2, 类似于EJB CMT的声明式事务管理,但不需要EJB容器;


    六,AOP 
    Spring的AOP支持的首要目标是要给POJOs提供J2EE服务,而且它有能够在应用服务器之间移植的优势,Spring AOP支持method interception,关键概念包括: 
    Interception:自定义行为能够在对接口和类的调用之前之后插入; 
    Introduction:指定advice会导致对象实现额外的接口,混乱了继承;

    Spring使用动态代理实现AOP或者在运行时使用CGLIB生成字节码(这是的能够代理类)。两种方法都能够在任何应用服务其中使用。 
    Spring使实现了AOP Alliance接口的AOP框架(在学习AOP中介绍过)。

    Spring AOP最常见的应用使声明式事务管理,这是基于前面描述的TransactionTemplate抽象上的,并且可以给任何POJO提供声明式事务管理。 
    Spring的声明式事务管理类似于EJB CMT,但在以下方面不同: 
    l 事务管理能够应用于任何POJO; 
    l 通过使用Spring的事务API能够在事务性POJO中实现编程回掉。为此我们提供静态的方法,使用ThreadLocal变量,因而不需要你传递EJBContext这样的对象确保回滚; 
    l 你可以声明式地定义“回滚规则”; 
    l 事务管理不绑定于JTA。 
    当然你还可以使用Spring AOP实现程序特有的aspects。 
    请对以上恢复出来的文字进行修改后提交
    七,MVC web框架 
    Spring的MVC model类似于Struts。在多线程服务对象这点上,Spring的Controller类似于Struts Action,只有一个实例处理所有客户请求。 
    Spring MVC比起Struts的优点: 
    1, Spring在Controller, JavaBean, model和views提供了一个非常清晰的划分; 
    2, Spring的MVC是非常灵活的。不像Struts强制你继承它的Action和Form对象,Spring MVC完全是基于接口的; 
    3, Spring MVC是真正的view无关的。你不会被强制使用JSP 
    4, 和其他对象一样,Spring的Controller是通过IoC配置的。使它们易于测试; 
    5, Web层变成了业务对象层上的薄薄一层


    八,EJB相关 
    实现EJB: 
    如果你选择使用EJB,Spring能在EJB实现和客户端访问EJB两方面都提供很大的好处。 
    Spring为session bean和message drive bean提供了方便的超类,使得通过自动载入基于包含在EJB jar文件中的XML文档BeanFactory让这变得很容易。 
    感觉不是很有用的样子。

    使用EJB: 
    许多EJB程序使用Service Locator和Business Delegate模式,这些比在客户代码中使用JDNI查找强多了,但是还是有显著的缺点: 
    l 使用EJB的典型代码依赖Service Locator或者Business Delegate singletons,难于测试; 
    l 在Service Locator模式没有使用Business Delegate的情况下,程序代码还要在EJB home重调用create()方法,并且可能导致异常,代码依然绑定在EJB API上; 
    l 实现Business Delegate模式通常导致显著的代码重复; 
    我们只需要给需要EJB的Bean定义一个组件,在XML中指定它的jndi name,interface,Spring AOP框架会帮你为EJB创建一个代理,实现了业务方法的接口,缓存EJBHome,代理JNDI查找,调用响应的业务方法。 
    从而使你的web层代码不依赖于EJB的使用,如果你要使用POJO或其他object代替EJB引用,你只需要改动组件定义xml,而不影响代码。

  • 相关阅读:
    django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法
    MySQL创建数据库与创建用户以及授权
    ubantu安装mysql
    sed命令详解
    docker-compose教程(安装,使用, 快速入门)
    Hive bucket表
    hive分区(partition)简介
    HIve实战分析Hadoop的日志
    hive 元数据解析
    hive学习笔记之-数据类型
  • 原文地址:https://www.cnblogs.com/javadan/p/4565140.html
Copyright © 2011-2022 走看看