首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

读他人的《Spring 技术手册》,写自己的理解(一)

2012-08-24 
读别人的《Spring 技术手册》,写自己的理解(一)我整合过SSH2做一些小Demo,因为最近要做毕业设计,所以想系统

读别人的《Spring 技术手册》,写自己的理解(一)

我整合过SSH2做一些小Demo,因为最近要做毕业设计,所以想系统的学习一下三大框架,我也是初学者,希望我的理解能对一些新手有帮助。进入正题(括号内红色字体为我个人的理解):

第一章 ?认识Spring(在看书之前,我接触过一些Spring,我的理解就是它是一个可以用来管理Hibernate,Struts的框架,算是框架之上的框架,它的强大之处在于依赖关系的转移,可以使应用程序不依赖于这个框架做开发,降低耦合性)

?

1.1 术语介绍

*轻量级-Lightweight(相对于一些重量级的如EJB等框架,文件容量非常之小,就几M,适用于所有的应用程序,不会成为应用程序的负担)

*非侵入性-No intrusive(Spring框架不会侵入应用程序,使得程序员开发的时候完全感觉不到框架的存在,提高重用性)

*容器-Container(就是一个Java程序,它帮你管理对象,只不过框架容器是人家已经写好,免费提供给你的)

*控制反转-Inversion of Control(Spring的核心技术,实现“依赖关系的转移”,有效的降低对象之间的耦合度,使得应用程序可以脱离框架)

*依赖注入-Dependency Injection(Spring的核心技术之一,只要你在配置文件中配置好每个对象的依赖关系,完全不用你自己再写代码去维护对象,Spring容易会自动根据配置,将你配置的依赖关系注入到对象中,非常方便)

*AOP-Aspect oriented programming(Spring的核心技术之一,面向切面编程,简单的来说就是你可以完全不动代码的情况下,增加一个或者删除一个功能)

*持久层(Spring提供DAO层的封装,简化,更爽的是提供和Hibernate的完美整合,运用到应用程序中非常之简单,你会感觉到你在傻瓜式编程读他人的《Spring 技术手册》,写自己的理解(一)

*Web框架(Spring+Struts+Hibernate完美整合)

*其他企业服务的封装(JNDI,Mail等一些企业服务)

?

1.2 控制反转(Inversion of Control)

(1)程序不应该依赖实现,而是依赖于抽象的接口。(主要目的是为了提高程序的可重用性,在Java里有一种机制叫做向上转型,即你把一个接口作为参数,那么实现这个接口的所有实现类都可以作为参数传递进来,这样使得当你要修改传入的参数实现类时,完全可以不用修改业务层的类和底层的接口类,非常方便,举个例子吧)

example:

原程序为:

?

public class Business{

private FloppyWriter writer=new FloppyWriter();

...

public void save|(){

...

writer.save();

}

}

(上面程序的意思是在高层的业务类Business类设计中,有一个存储的功能,这个功能的实现是构造一个FloppyWriter对象,然后调用这个对象的save()方法,这样做的结果使得业务类依赖于底层的实现类,如果我们有一天底层改成USBWriter实现存储的话,就需要修改代码了,而无法直接重用,所以代码作如下的修改)

先申明一个接口:

?

public interface IDeviceWriter{

?

public void saveToDevice();

?

}

?

接着设计Business业务类,遇到存储的功能时,依赖于接口,而不是实现类,如下:

public class Business{

private IDeviceWriter writer;


public void setDeviceWriter(IDeviceWriter writer){

?

this.writer=writer;

?

}


public void save(){

?

//实现存储功能

...

writer.save();

...

}

}

?

这样的设计下,Business类就可以重用,不管存储的介质是软盘还是USB还是别的什么,只要针对某种介质,实现IDeviceWriter接口,然后将该实现类作为参数传入即可,举个书上的例子。

设计一个USB实现的例子:

?

public class UsbDiskWriter implements IDeviceWriter{

public void saveToDevice(){

...

//实际存储至usb的程序代码

...

}

}

?

使用如下:

?

Business b=new Business();

b.setDeviceWriter(new?UsbDiskWriter());

b.save();

?

同理你如果换成别的存储介质存储,也可作如上的实现,使用。档案您也可以写一个配置管理程序,通过一个XML文件或者Properties文件更改配置,详细例子见书上P7所示,因为我觉得那是没出现Spring 容器以前的老办法,所以就不详述了。

总结一下控制反转(IOC),这是Spring最核心的技术之一,其实它的关键之处就在于“转移”,依赖关系的转移,如从业务类依赖于功能类转移到业务类依赖于功能类的接口,这样子能提高业务类的可重用性,还有一点很重要,就是应用程序和容器之间的关系,不要向容器要求所需的对象资源,容器会自动根据配置文件将对象提供给应用程序,这样子能使得应用程序和容易脱离,提高整个应用程序的可重用性,软件开发其实都是一样,不管你在什么开发环境下,用什么开发语音,什么开发框架进行开发,最理想的状态不是因为需求而开发,而是能做出一套功能强大的程序,重用性非常高,提高软件开发效率,至少我认为,这个是软件开发的真谛-重用性。这也是许多新框架,新技术出来的原因。

1.3 依赖注入(Dependency Injection)

其实我一直都是把IOC和DI放在一起理解的,因为依赖注入是IOC的实现方式之一,IOC有两种实现方式,第一就是DI了,还有一种是依赖查找(Dependency Lookup)(第二种方式具体的大家google,在这里我就不多介绍了,好像很多面试都会考到)。

DI的意义就是保留抽象接口,让组件依赖抽象接口,当组件要与其他实际的对象发生依赖关系时,由抽象接口来注入依赖的实际对象。

DI有三种方式,分别介绍:

Type 1 IoC:Interface injection

使用T1时会要求实现这个接口,而对象所在的容器也会使用这个接口,所以会使得业务类依赖于容易,不建议使用,重用性受到严重影响。

?

Type 2 IoC:Setter injection

T2是一种非常好的注入方法,通过业务类中的set方法进行灵活的注入,而且set方法的名字有一定的规则,放依赖关系比较复杂,注入对象比较多的时候很适合使用这种注入方式。

?

Type 3 IoC:Construtor injection

T3也还不错,当你构造对象的时候会自动进行注入,这就是它最大的优点,但是如果依赖关系比较复杂或者注入对象比较多时,这样的构造方法就非常笨拙,所有有利有弊。

?

总结,第一章主要是对Spring的一些基本概念的理解,并没有深入的介绍它的核心技术,我也只是一个Spring的初学者,记录下来一些自己理解的内容,也许有不对的地方希望大家可以指正,谢谢。有什么问题请留言。Spring的技术并不难学,我相信初学的你会和初学的我一起进步,第一章结束,盗用书上一句话:Don't call me ,I'll call you.

热点排行