Spring 学习一(了解Spring)
程序员文章站
2022-03-10 18:04:32
1.Spring 框架的概念? Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AO ......
1.spring 框架的概念?
spring框架是一个开放源代码的j2ee应用程序框架,由rod johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 spring解决了开发者在j2ee开发中遇到的许多常见的问题,提供了功能强大ioc、aop及web mvc等功能。spring可以单独应用于构筑应用程序,也可以和struts、webwork、tapestry等众多web框架组合使用,并且可以与 swing等桌面应用程序ap组合。因此, spring不仅仅能应用于jee应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。spring框架主要由七部分组成,分别是 spring core、 spring aop、 spring orm、 spring dao、spring context、 spring web和 spring web mvc。
2.spring框架 组成?
spring 框架是一个分层架构,由 7 个定义良好的模块组成,分别是 spring core、 spring aop、 spring orm、 spring dao、spring context、 spring web和 spring web mvc。
组成spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
1、核心容器 (spring core):核心容器提供 spring 框架的基本功能(spring core)。核心容器的主要组件是 beanfactory,它是工厂模式的实现。beanfactory 使用控制反转(ioc) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开 [3] 。
2、spring 上下文(spring context):spring 上下文是一个配置文件,向 spring框架提供上下文信息。spring 上下文包括企业服务,例如jndi、ejb、电子邮件、国际化、校验和调度功能。
3、spring aop:通过配置管理特性,spring aop 模块直接将面向切面的编程功能集成到了 spring 框架中。所以,可以很容易地使 spring 框架管理的任何对象支持aop。spring aop 模块为基于 spring 的应用程序中的对象提供了事务管理服务。通过使用 spring aop,不用依赖 ejb 组件,就可以将声明性事务管理集成到应用程序中。
4、spring dao:jdbcdao抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。spring dao 的面向 jdbc 的异常遵从通用的 dao 异常层次结构。
5、spring orm:负责框架中对象关系映射,提供相关orm 接入框架的关系对象管理工具 [2] 。spring 框架插入了若干个orm框架,从而提供了 orm 的对象关系工具,其中包括jdo、hibernate和ibatissql map。所有这些都遵从 spring 的通用事务和 dao 异常层次结构。
6、spring web 模块:web 上下文模块建立在应用程序上下文模块之上,为基于 web 的应用程序提供了上下文。所以,spring框架支持与 jakarta struts 的集成。web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
7、spring mvc 框架:mvc框架是一个全功能的构建 web应用程序的 mvc 实现。通过策略接口,mvc框架变成为高度可配置的,mvc 容纳了大量视图技术,其中包括 jsp、velocity、tiles、itext 和 poi。模型由javabean构成,存放于map;视图是一个接口,负责显示模型;控制器表示逻辑代码,是controller的实现。spring框架的功能可以用在任何j2ee服务器中,大多数功能也适用于不受管理的环境。spring 的核心要点是:支持不绑定到特定 j2ee服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同j2ee 环境(web 或ejb)、独立应用程序、测试环境之间重用。
3.spring框架 特征?
轻量——从大小与开销两方面而言spring都是轻量的。完整的spring框架可以在一个大小只有1mb多的jar文件里发布。并且spring所需的处理开销也是微不足道的。此外,spring是非侵入式的:典型地,spring应用中的对象不依赖于spring的特定类。
控制反转——spring通过一种称作控制反转(ioc)的技术促进了低耦合。当应用了ioc,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为ioc与jndi相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。它的底层设计模式采用了工厂模式,所有的 bean 都需要注册到bean工厂中,将其初始化和生命周期的监控交由工厂实现管理。程序员只需要按照规定的格式进行bean开发,然后利用xml文件进行bean 的定义和参数配置,其他的动态生成和监控就不需要调用者完成,而是统一交给了平台进行管理。 [4] 控制反转是软件设计大师 martin fowler在 2004 年发表的”inversion of control containers and the dependency injection pattern”提出的。这篇文章系统阐述了控制反转的思想,提出了控制反转有依赖查找和依赖注入实现方式。控制反转意味着在系统开发过程中,设计的类将交由容器去控制,而不是在类的内部去控制,类与类之间的关系将交由容器处理,一个类在需要调用另一个类时,只要调用另一个类在容器中注册的名字就可以得到这个类的实例,与传统的编程方式有了很大的不同,“不用你找,我来提供给你”,这就是控制反转的含义 [5] 。
面向切面——spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
容器——spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,spring不应该被混同于传统的重量级的ejb容器,它们经常是庞大与笨重的,难以使用。
框架——spring可以将简单的组件配置、组合成为复杂的应用。在spring中,应用对象被声明式地组合,典型地是在一个xml文件里。spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
mvc——spring的作用是整合,但不仅仅限于整合,spring 框架可以被看做是一个企业解决方案级别的框架。客户端发送请求,服务器控制器(由dispatcherservlet实现的)完成请求的转发,控制器调用一个用于映射的类handlermapping,该类用于将请求映射到对应的处理器来处理请求。handlermapping 将请求映射到对应的处理器controller(相当于action)在spring 当中如果写一些处理器组件,一般实现controller 接口,在controller 中就可以调用一些service 或dao 来进行数据操作 modelandview 用于存放从dao 中取出的数据,还可以存放响应视图的一些数据。 如果想将处理结果返回给用户,那么在spring 框架中还提供一个视图组件viewresolver,该组件根据controller 返回的标示,找到对应的视图,将响应response 返回给用户。
所有spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为spring中的各种模块提供了基础支持。
4.spring框架 特点?
1.方便解耦,简化开发
通过spring提供的ioc容器,我们可以将对象之间的依赖关系交由spring进行控制,避免硬编码所造成的过度程序耦合。有了spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
2.aop编程的支持
通过spring提供的aop功能,方便进行面向切面的编程,许多不容易用传统oop实现的功能可以通过aop轻松应付。
3.声明式事务的支持
在spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
4.方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,在spring里,测试不再是昂贵的操作,而是随手可做的事情。例如:spring对junit4支持,可以通过注解方便的测试spring程序。
5.方便集成各种优秀框架
spring不排斥各种优秀的开源框架,相反,spring可以降低各种框架的使用难度,spring提供了对各种优秀框架(如struts,hibernate、hessian、quartz)等的直接支持。
6.降低java ee api的使用难度
spring对很多难用的java ee api(如jdbc,javamail,远程调用等)提供了一个薄薄的封装层,通过spring的简易封装,这些java ee api的使用难度大为降低。
7.java 源码是经典学习范例
spring的源码设计精妙、结构清晰、匠心独运,处处体现着大师对java设计模式灵活运用以及对java技术的高深造诣。spring框架源码无疑是java技术的最佳实践范例。如果想在短时间内迅速提高自己的java技术水平和应用开发水平,学习和研究spring源码将会使你收到意想不到的效果。
5.spring框架好处?
spring能有效地组织你的中间层对象,无论你是否选择使用了ejb。如果你仅仅使用了struts或其他的包含了j2ee特有api的framework,你会发现spring关注了遗留下的问题。spring能消除在许多工程上对singleton的过多使用。根据我的经验,这是一个主要的问题,它减少了系统的可测试性和面向对象特性。
spring能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置。曾经我们可能对类是否有某个属性会感到迷惑,因此我们不得不去看它的javadoc或源码。自从有了spring,你可很简单地看到类的javabean属性。反转控制的使用(在下面讨论)帮助完成这种简化。
spring能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。
spring被设计为让使用它创建的应用尽可能少的依赖于他的apis。在spring应用中的大多数业务对象没有依赖于spring。
使用spring构建的应用程序易于单元测试。
spring能使ejb的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用pojos或local ejbs来实现业务接口,却不会影响调用代码。
spring帮助你解决许多问题而无需使用ejb。spring能提供一种ejb的替换物,它们适于许多web应用。例如,spring能使用aop提供声明性事务而不通过使用ejb容器,如果你仅仅需要与单个的数据库打交道,甚至不需要jta实现。
spring为数据存取提供了一致的框架,不论是使用jdbc或o/r mappin*品(如hibernate)。
spring确实使你能通过最简单可行的解决办法解决你的问题。这些特性是有很大价值的。
总结起来,spring有如下优点:
1.低侵入式设计,代码污染极低
2.独立于各种应用服务器,基于spring框架的应用,可以真正实现write once,run anywhere的承诺
3.spring的di机制降低了业务对象替换的复杂性,提高了组件之间的解耦
4.spring的aop支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
5.spring的orm和dao提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问
6.spring并不强制应用完全依赖于spring,开发者可*选用spring框架的部分或全部
上一篇: 多租户&多账户&多公众号_saas微信公众平台设计思路
下一篇: BS与CS架构