反思spring:由Ruby on Rails想到的
[size=11]
众所周知,RoR里面的指导原则有:
第一条是较小的软件,这意味着你编写较少的程序行。程序小就能加速开发,错误也较少,使得程序较容易理解、维护和增强。对编写较小程序做出贡献的Ruby的一个特性就是它假设该架构本身能够并应该处理元数据.
第二条是对配置的协定原理,这意味着Rails不用配置文件,而是依靠一些简单的编程协定,让它通过利用应用程序已有的信息和在运行的数据库,解决它需要知道什么这个问题。
Spring一个非常灵活的一个框架,灵活的同时也造成了一定的复杂性。我个人眼中的spring应该从RoR学到的东西应该有:不用写一行xml语句就可以配置好AOP常规的事务管理,约定高于配置。
当前spring支持的事务管理配置,大体有以下两种配置方式,为了方便举例子,所以借用了javaEE技术专家"江南白衣"的两段代码
(1)、spring2.0版本支持的事务管理
package org.appfuse.dao.hibernate;import java.util.List;import org.appfuse.dao.UserDAO;import org.appfuse.model.User;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;[color=blue]//假设有下面这一个类import org.springframework.orm.hibernate3.support.annotations.TransactionAop;[/color][color=blue]@TransactionAop(hibernate3)[/color]public class UserDAOHibernate extends HibernateDaoSupport implements UserDAO{ public User getUser(Long userId) {return (User)this.getHibernateTemplate().get(User.class, userId);}public List getUsers() { return this.getHibernateTemplate().find("from User");}public void removeUser(Long userId) {Object user = this.getHibernateTemplate().load(User.class, userId);this.getHibernateTemplate().delete(user);}public void saveUser(User user) {this.getHibernateTemplate().saveOrUpdate(user);}}spring的事务定义很灵活很广,定义七种的传播行为和五种的隔离常量,但用得比较多还是PROPAGATION_REQUIRED和PROPAGATION_REQUIRED,readOnly,所以我提出上面所述的一点假想,可以简便开发。