您的位置:首页 > 编程语言 > Java开发

初识Spring——Spring 学习之一 推荐

2007-09-17 23:57 411 查看
[align=center] [/align]
回来了……
项目初定的用EXT+DWR(Struts)+Spring+Hibernate框架来写,需要准备的知识很多。首先从Spring开始吧,一个个来,会把它们全高清楚的。不说这么多了,开始吧……
首先了解概念、术语:
1.何谓Spring
Spring是个一个全方位的应用程序框架(Application framework),它是实现IOC(Inversion of Control)容器和非侵入性的框架,并提供AOP(Aspect-oriented programming)概念的实现方式。
此外,提供Persistence, Transaction的支持,MVC的实现方式,对于现存的各种框架(struts,JSF, Hibernate等),Spring也提供了与它们相整合的方案。
2.轻量级(Lightweight)
相对于一些重量级的容器(如EJB容器)来说的,spring核心包在文件容量上只有不到1MB。轻量级致力于用更简单、更易于管理的方式提供更多的“即开即用”的J2EE服务,尽量隐藏框架本身,使开发者首先使用POJO而不是EJB.
3.非侵入性(NO intrusive)
使框架与应用程序向分离,应用程序不使用Spring的API,保证应用程序的独立性,提供程序组件的复用性。
4.容器(container)
容器可以管理对象的生成、资源的取得、销毁等生命周期,甚至建立对象与对象之间的依赖关系。只要容器启动,就能方便获得容器中的实例。
5.Inversion of Control 与 Dependency injection
Inversion of Control 翻译成“控制反转”显得有些牵强,更好的理解应为:依赖关系的转移,依赖于抽象而非实践,IOC可以避免对象之间的耦合,避免应用程序依赖于容器的功能,从而脱离容器。
Example: 你可能会这样写出这样的程序,如图
[align=center][/align]



[align=center]图1-1[/align]
本例中,直接在高层应用中调用底层模块API,导致应用程序对底层模块产生依赖。如果现在要把数据存在USB磁盘,则这个程序将无法使用。
为了“解耦”,实现依赖关系的转移,定义接口:

public interface IDeviceWriter {
public void saveToDevice();
}
程序不应依赖于实现,而是应依赖于抽象的接口,定义Business类,遇到存档时让其依赖于IDeviceWriter,而不是FloppyWriter.
public class Business {
private IDeviceWriter writer;
public void setDeviceWriter(IDeviceWriter writer) {
this.writer = writer;
}
public IDeviceWriter getDeviceWriter() {
return writer;
}
public void save() {
if(writer == null) {
throw new RuntimeException("DeviceWriter needed...");
}
writer.saveToDevice();
}
}
接着定义IDevieceWriter的具体实现,如FloppyWriter,(UsbDiskWrter 类似)
public class FloppyWriter implements IDeviceWriter {
public void saveToDevice() {
System.out.println("储存至软盘...");
}
}
则修改后的的程序模型变为:
[align=center][/align]



从图中可以看出,应用程序与具体实现成功解耦,具体调用生什么实现由配置文件决定。

6.AOP(Aspect-oriented Programming)
简单理解就是,在不修改原程序代码的前提下,为原程序提供更多的功能。例如:某个运用程序有Logging的需求,你可以不修改任何一行代码,加入或者移除这个需求,(当然需要修改配置文件)。
7、依赖注入(Dependency Injection)
意义:保留抽象的接口,让组件(Compoment)来继承抽象接口,当组件要与其它实际对象发生依赖关系时,由抽象接口来注入实际对象。 依赖注入一般有以下三种形式:
1)、通过setXXX()方法来注入所依赖的对象。
2)、在构造方法中(constructor)中注入依赖关系。类似与setXXX方法,一般在调用构造函数时传入依赖对象。
3)、Interface injection,接口定义位于容器API,使用时要求实现接口,具有较强的侵入性,降低组件的可重用性,不推荐使用。

声明:学习笔记中的源代码,及相关知识均来自《Spring2.0技术手册》林信良 (2007),仅供学习交流,请勿它用!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息