组成 Spring 框架的每个模块(或组件)都可以单独存在或者与其他一个或多个模块联合实现每个模块的功能如下
核心容器核心容器提供 Spring 框架的基本功能核心容器的主要组件是 BeanFactory它是工厂模式的实现BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开
Spring 上下文Spring 上下文是一个配置文件向 Spring 框架提供上下文信息Spring 上下文包括企业服务例如 JNDIEJB电子邮件国际化校验和调度功能
Spring AOP通过配置管理特性Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中所以可以很容易地使 Spring 框架管理的任何对象支持 AOPSpring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务通过使用 Spring AOP不用依赖 EJB 组件就可以将声明性事务管理集成到应用程序中
Spring DAOJDBC DAO 抽象层提供了有意义的异常层次结构可用该结构来管理异常处理和不同数据库供应商抛出的错误消息异常层次结构简化了错误处理并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构
Spring ORMSpring 框架插入了若干个 ORM 框架从而提供了 ORM 的对象关系工具其中包括 JDOHibernate 和 iBatis SQL Map所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构
Spring Web 模块Web 上下文模块建立在应用程序上下文模块之上为基于 Web 的应用程序提供了上下文所以Spring 框架支持与 Jakarta Struts 的集成Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作
Spring MVC 框架MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现通过策略接口MVC 框架变成为高度可配置的MVC 容纳了大量视图技术其中包括 JSPVelocityTilesiText 和 POI
Spring 框架的功能可以用在任何 JEE 服务器中大多数功能也适用于不受管理的环境Spring 的核心要点是支持不绑定到特定 JEE 服务的可重用业务和数据访问对象毫无疑问这样的对象可以在不同 JEE 环境 (Web 或 EJB)独立应用程序测试环境之间重用
Spring事务管理
在学习spring事务管理时我忍不住要问spring为什么进行事务管理spring怎么进行的事务管理?
首先为什么要进行事务接下来说说spring是怎样进行事务管理的
① Spring事务策略
Spring事务策略也就是spring事务管理的实现方式它有一个统一的抽象是由实现下面这个接口完成的
orgspringframeworktransactionPlatformTransactionManager
此接口的内容如下:
Public interfacePlatformTransactionManager(){
TransactionStatue getTransaction(TransactionDefinition definition) throws TransactionException;
Void commit(TransactionStatus status) throws TransactionException;
Void rollback(TransactionStatus status) throws TransactionException;
}
不管是声明式的还是编程式的事务管理都需要此抽象来完成
解释一下这个接口这样可以更好的理解spring的事务控制的原理
getTransaction()根据类型为TransactionDefinition的参数返回一个TransactionStatus对象返回的TransactionStatus对象可能代表一个新的或已经存在的事务(如果在当前调用堆栈有一个符合条件的事务)如同JEE事务上下文一个TransactionStatus也是和执行的线程关联的
同时在框架中还存在TransactionDefinition接口即上边的参数类型此接口指定了事务隔离程度事务传播事务超时只读状态
另外还有TransactionStatus接口这个接口为处理事务提供简单的控制事务执行和查询事务状态的方法
② 两种事务管理方式编程式声明式
Spring提供两种方式的编程式事务管理分别是使用TransactionTemplate和直接使用PlatformTransactionManager
ⅰ TransactionTempale采用和其他Spring模板如JdbcTempalte和HibernateTemplate一样的方法它使用回调方法把应用程序从处理取得和释放资源中解脱出来如同其他模板TransactionTemplate是线程安全的
代码片段
Object result =ttexecute(newTransactionCallback(){
publicObject doTransaction(TransactionStatus status){
updateOperation();
returnresultOfUpdateOperation();
}
});
使用TransactionCallback()可以返回一个值
如果使用TransactionCallbackWithoutResult则没有返回值
ⅱ 也可以使用PlatformTransactionManager直接管理事务简单地通过一个bean引用给你的bean传递一个你使用的PlatformTransaction对象然后使用TransactionDefinition和TransactionStatus对象就可以发起回滚提交事务