众所周知RoR里面的指导原则有
第一条是较小的软件这意味着你编写较少的程序行程序小就能加速开发错误也较少使得程序较容易理解维护和增强对编写较小程序做出贡献的Ruby的一个特性就是它假设该架构本身能够并应该处理元数据
第二条是对配置的协定原理这意味着Rails不用配置文件而是依靠一些简单的编程协定让它通过利用应用程序已有的信息和在运行的数据库解决它需要知道什么这个问题
Spring一个非常灵活的一个框架灵活的同时也造成了一定的复杂性我个人眼中的spring应该从RoR学到的东西应该有不用写一行xml语句就可以配置好AOP常规的事务管理约定高于配置
当前spring支持的事务管理配置大体有以下两种配置方式为了方便举例子所以借用了javaEE技术专家江南白衣的两段代码
()spring版本支持的事务管理
代码
<bean id=baseTxService class=orgspringframeworktransactioninterceptorTransactionProxyFactoryBean
abstract=true>
<property name=transactionManager ref=transactionManager/>
<property name=proxyTargetClass value=true/>
<property name=transactionAttributes>
<props>
<prop key=get*>PROPAGATION_REQUIREDreadOnly</prop>
<prop key=find*>PROPAGATION_REQUIREDreadOnly</prop>
<prop key=save*>PROPAGATION_REQUIRED</prop>
<prop key=remove*>PROPAGATION_REQUIRED</prop>
</props>
</property>
<property name=preInterceptors>
<list>
<ref bean=methodSecurityInterceptor/>
</list>
</property>
</bean>
<bean id=bookManager parent=baseTxService>
<property name=target>
<bean class=orgspringsidebookstoreadminmanagerBookManager/>
</property>
</bean>
() spring开始支持事务管理的新配置
代码
<aop:config proxy
target
class=
true
>
<aop:advisor pointcut=execution(*yourpackagename*Manager*()) adviceref=txAdvice/>
<aop:advisor pointcut=execution(*yourpackagename*Managersave()) adviceref=fooAdvice/>
</aop:config><tx:advice id=txAdvice transactionmanager=transactionManager>
<tx:attributes>
<tx:method name=save*/>
<tx:method name=remove*/>
<tx:method name=* readonly=true/>
</tx:attributes>
</tx:advice>
<bean id=bookManager class=orgspringsidebookstorecommonsserviceBookManager/>
[] []