声明式事务和自动代理初步认识 和 最近用到的重构

我所在的公司一直是使用这种方式 进行spring上的事务控制的 先放代码:

    <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager">
            <ref bean="framework.hibernateTxManager" />
        </property>
        <!-- 配置事务属性 这里是声明式事务-->
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED,-Throwable</prop>
                <prop key="save*">PROPAGATION_REQUIRED,-Throwable</prop>
                <prop key="delete*">PROPAGATION_REQUIRED,-Throwable</prop>
                <prop key="create*">PROPAGATION_REQUIRED,-Throwable</prop>
            </props>
        </property>
    </bean>
    <bean
<!-- 这里是自动代理方式,把事务控制加到了对应的服务类 -->       <class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <value>XXX.XXXXXService</value>
                <value>XXX.XXXXXXBService</value>
                <value>XXX.CommonService</value>
                <!-- 上面的是服务类,Spring会对应找相关的bean     
                 ID 添加代理,同样也支持 *Service 进行模糊匹配-->

            </list>
        </property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
            </list>
        </property>
    </bean>

自动代理可以使得在Spring在加载类的时候,就实现代理,进而整个框架内对该服务的方法,都会实现事务控制。
简单代理引用别的大神的:自动代理例子
PS:这是我暂时的理解,以后会多多写一些东西 ,希望有成长吧

//2017.05.05
声明式事务支持拦截的方式进行控制代码:

<bean id="baseProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <ref bean="waf.dataSourceTransactionManager" />
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="doInTransaction">PROPAGATION_REQUIRED,-Throwable</prop>
                <prop key="add*">PROPAGATION_REQUIRED,-Throwable</prop>
            </props>
        </property>
    </bean>

在需要控制事物的service 配置拦截 代码如下:

 <bean id="MyService" parent="baseProxy">
        <property name="target">
            <bean class="com.xxxx.xxxxx.service.impl.MyService" parent="FBCM.baseService" />
        </property>
    </bean>

也就是说声明式事务可以通过自动代理和拦截两种方式进行配置是。

另外终于把一个坑的要死的客户项目结项了总结一下吧。
本来5个月的项目,硬是让我维护了快一年半了,客户终于愿意签字结项了。去年看了看《重构-改善既有代码的设计》这本书,发现里面的思想非常有趣,先说一下我自己的一点小观点吧:
1、首先作者认为,代码起初的设计是不可能完美的,所以重构是一种必然。并且作者认为,如果把所有精力、成本都放在开始的代码设计上,是一种吃力不讨好的行为,那样从软件工程的角度上来说也是一种资源浪费。所以代码重构是一种必然。
2、另外作者认为在第二章花了大量的文字论述了一个大部分程序猿对于重构的偏见,他是吃力不讨好的。因为重构一段代码往往是消耗大量经历的,甚至是比重新开发还要费事,这一点对于项目经理来说更是这样,因为从项目的角度来说注重的是速度与效率。
但作者用了很多个例子和点证明了一件事,如果既有代码已经破败不堪,那么在他的上面强硬的添加功能、修改代码,只会徒增BUG,其中隐含的成本是更大的。
3、作者在书中先证明了重构不可避免、又从项目的角度证明他其实是在节约成本,而后续作者罗列非常多的具体技巧、告诉开发者,用合适的重构技巧,可以适当的避免BUG的出现,让你处理当不知道上一任开发的代码意图的情况下,进行开发。
每一位开发都清楚,我们理解上一位开发写的逻辑是一件让人烦躁的事情,而这本书告诉你了好几种绝对安全的方式、即使你不能够很好的理解既有代码的情况下,安全修改代码。例如对于类的包装,如果你想修改一个已经存在的工具类、实体类。但你并不知道这个类、或者方法已经被多少个地方使用了,那么就可以使用这个方法,把这个类包装起来,用一个构造器将已存在的类放进来,在不破坏原有类的情况下,使用原有类的逻辑,在上面添加新的功能。
但这样的方法一定是万能的么,作者在每一个方法中也提到了其中的弊端,例如包装的方法无法修改已有内部的中间逻辑,他不具备继承的优势,但同样也避免了继承中,类声明导致的误导。
所以每个方法都有好有坏,感觉挨个看了一遍都是照猫画虎,不怎么会用,以后多照着书上的试试吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值