漫谈Spring
spring的官方下载http://www.springsource.org/download/
一、认识Spring
?????? Spring 是一个开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
1.?Spring降低组件之间的耦合度,实现软件各层之间的解耦。
2.?Spring为我们提供了大量的服务,这些服务只需调用几个方法就能使用,很方便。下面提供一些具体的服务与方法:
3.?Spring提供了单例模式、工厂模式等支持,开发人员不需要自己编写代码就能实现,只需做些配置即可:
4.?容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
5.?容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。
6.?Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。
在java的spring基础上又延伸了其他语言类型、应用环境的spring框架。比如说,.NET应用程序框架 Spring.NET、Spring框架的Delphi版本 Spring4D 、手机上的web应用开发Spring Mobile(springMVC的扩展)、Spring Android、Spring的Python移植版 Spring Python等诸多spring拓展型框架。
二、使用spring
?????? Spring的使用一般有这么几种技术
1.?控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。
2.?面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如事务(transaction)管理)进行内聚性的开发。
3.?容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。
4.?SpringMVC——使用Spring可插入的MVC架构,可以选择使用内置的SpringMVC Web框架,也可以选择使用Struts这样的Web框架。
????? springMVC通过controller层向view层界面提供接口,从而实现响应用户动作,达到数据流转的目的。
??????spring的server层就是对业务的数据处理和逻辑判断。
????? spring的dao层就是提供面向数据操作的接口,方便我们开发人员对用户动作提交的数据进行增删改查。
??????Spring的完善性和封装性使得当我们要使用spring开发项目时,只需要在它的applicationContext.xml中配置:
1.?在spring中所用到的相应的功能件的地址
2.?自动扫描类路径
3.?数据源
4.?session工厂
5.?事务bean
????? 然后就是把我们所用到的dao、server、controller等通过标签的形式注入到spring容器中,开发时只需要开发对应的界面--controller--server--dao 整套业务功能流程就能实现了。
三、Spring扩展
?????? 既然spring的controller层通过springMVC给view界面提供接口,而每个子业务或子系统都有可能有自己单独的controller,这样一来给界面开放的接口是不是太多了,我们可不可以将这些接口集中起来然后再提供统一的接口给界面呢(这个想法源于我们主管)?就像厂家生产出的商品,要找代理商,再由代理商卖给顾客。
那么controller层是不是也可以加个代理机制,加了代理机制会产生什么副作用吗?
就像买卖东西通过代理商理论上肯定会比顾客直接在厂商那儿买商品的流程慢些,但实际上如果人流量太大,厂商还要兼顾生产和销售,势必会影响商品质量和服务质量,再算上其他人为因素…可想而知,还是代理渠道更稳固。有了代理,厂家只重生产,质量就能得到保证,代理商就一心搞销售,客户的需求就能更好的满足,而对于客户而言,我只要得到我想要的好商品就行了,这样就皆大欢喜了。就像厂商、代理商和顾客之间的关系一样,客户端、服务端加上了代理,由于有Java的反射机制,整个流程的速度肯定会比单一的客户端、服务端要慢点儿。但是这种运行流程速度在cpu的高速下基本是可以忽略的,而代理所起到的作用也远远高于它的弊端。
当这个想法成熟了,再通过springMVC的标注和java的反射机制来实现这个代理层也就很容易了。