当前位置:首页>财经>正文

sPring什么意思 Spring用到哪些设计模式

2024-01-03 11:38:48 互联网 未知 财经

 sPring什么意思 Spring用到哪些设计模式

sPring什么意思

,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,而不影响代码。

亲,我的回答你满意吗?如果满意就请右上角采纳,如果不满意,你可以继续问我哦

Spring用到哪些设计模式

developerWorks 中国 技术主题 Java technology 文档库 Spring 框架的设计理念与设计模式分析 Spring 作为现在最优秀的框架之一,已被广泛的使用,并且有很多对其分析的文章。本文将从另外一个视角试图剖析出 Spring 框架的作者设计 Spring 框架...

Spring中的Jdbc的模板类是什么?

org.springframework.jdbc.datasource.DriverManagerDataSource
里面有driverClassName,url,username,password这四个属性,含义你知道的,同普通的djbc连接一样的

spring中用到哪些设计模式

1.工厂模式,这个很明显,在各种BeanFactory以及ApplicationContext创建中都用到了;
2.模版模式,这个也很明显,在各种BeanFactory以及ApplicationContext实现中也都用到了;
3.代理模式,在Aop实现中用到了JDK的动态代理;
4.单例模式,这个比如在创建bean的时候。
5.Tomcat中有很多场景都使用到了外观模式,因为Tomcat中有很多不同的组件,每个组件需要相互通信,但又不能将自己内部数据过多地暴露给其他组件。用外观模式隔离数据是个很好的方法。
6.策略模式在Java中的应用,这个太明显了,因为Comparator这个接口简直就是为策略模式而生的。Comparable和Comparator的区别一文中,详细讲了Comparator的使用。比方说Collections里面有一个sort方法,因为集合里面的元素有可能是复合对象,复合对象并不像基本数据类型,可以根据大小排序,复合对象怎么排序呢?基于这个问题考虑,Java要求如果定义的复合对象要有排序的功能,就自行实现Comparable接口或Comparator接口.
7.原型模式:使用原型模式创建对象比直接new一个对象在性能上好得多,因为Object类的clone()方法是一个native方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。
8.迭代器模式:Iterable接口和Iterator接口 这两个都是迭代相关的接口,可以这么认为,实现了Iterable接口,则表示某个对象是可被迭代的;Iterator接口相当于是一个迭代器,实现了Iterator接口,等于具体定义了这个可被迭代的对象时如何进行迭代的