一、Spring 开发准备
下载程序包:spring-framework-2.0-rc3-with-dependencies.zip
网址:http://www.springframework.org/
说明:Spring的下载包有两种,一种是带有“with-dependencies”名称的,这种包含了Spring常用到的第三方包,比如Hibernate、log4j、jakarta-commons等,可以省却查找第三方包的麻烦。
注:程序环境:
Windows XP Professional 2002 Service Pack 2
二、Spring框架简介
Spring是一个非常优秀的轻量级框架。Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式。组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
1.核心容器
核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
2.Spring 上下文
Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
3.Spring AOP
通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
4.Spring DAO
JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
5.Spring ORM
Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL 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。
三、事例实践
模块AOP使用测试程序
编写普通的业务逻辑Bean是非常容易而且易于测试的,最后的一步便是在Spring框架中将这些业务Bean以XML配置文件的方式组织起来,它们就按照我们预定的目标正常工作了。Spring的AOP将复杂的业务逻辑分离到每个方面中。
1) 开发环境配置
2) 编写Bean接口及其实现
3) 在Spring中配置Bean并获得Bean的实例
4) 编写Advisor以增强业务Bean
实现:
1) eclipse-SDK- 3.1.1 -win3,新建一个Java Project,将Spring的发布包spring.jar以及commons-logging-1.0.4.jar复制到Project/lib目录下,这两个包可以在/spring-framework-2.0-rc3-with-dependencies/spring-framework-2.0-rc3/dist和/spring-framework-2.0-rc3-with-dependencies/spring-framework-2.0-rc3/lib下找到。并在Project > Properties中配置好Java Build Path,添加这两个包。
2) 实现一个业务Bean:首先定义ServiceBean接口,声明业务方法。然后在MyServiceBean中实现接口。
3) 把ServiceBean交给Spring来管理,需要编写XML配置文件。新建一个beans.xml,放到src目录下,必须确保在classpath中能找到此配置文件。配置文件如下(部分):
<beans>
<bean id="service" class="com.crackj2ee.example.spring.MyServiceBean" />
</beans>
以上XML声明了一个id为service的Bean,默认地,Spring为每个声明的Bean仅创建一个实例,并通过id来引用这个Bean。然后在main方法,让Spring来管理业务Bean。使用Factory模式。
// init factory:
XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
// use service bean:
ServiceBean service = (ServiceBean)factory.getBean("service");
……
// close factory:
factory.destroySingletons();
以上是初始化和销毁Spring的BeanFactory的典型代码。
以上1)、2)、3)步实现基本Spring框架。
4) 所谓AOP即是将分散在各个方法处的公共代码提取到一处,并通过类似拦截器的机制实现代码的动态织入。即在某个方法的调用前、返回前、调用后和抛出异常时,动态插入自己的代码。我们来编写一个LogAdvisor,对每个业务方法调用前都作一个记录。使用了一个ProxyFactoryBean作为service来与客户端打交道,而真正的业务Bean即MyServiceBean被声明为serviceTarget并作为参数对象传递给ProxyFactoryBean,proxyInterfaces指定了返回的接口类型。