快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

简化spring(5)--减少不必要的基于接口编程


    众所周知,Spring是提倡基于接口编程的。    但也有些Service类,比如SaleOrderManager 和SaleOrderManagerImpl,只有5%的机会再有另一个Impl实现。95%时间里这两兄弟站一起,就像C++里的.h和.cpp,徒增维护的繁琐,所以刚开始用Spring的时候就想去掉它,今天偶尔在群里聊起动态代理,算是搞明白了其中的道理,谢谢Sparkle :)      IOC是不会强制基于接口的,是这些Service类一般要使用Spring的声明式事务机制,而声明式的事务机制是使用Spring AOP来实现的。    再看Spring AOP,混合使用了Java的动态代理和CGLib2,因为:    Java的动态代理是AOP的理想方法,但只能用于接口。假如基于Class的时候,Spring AOP就会用CGLib生成目标类的子类来实现AOP,相称现实。    所以,我们只要指定使用声明式事务bean使用CGLib来实现AOP,就可以不基于接口编程了。    指定的方法是设置proxyTargetClass为true。eg.

     <bean id="baseService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"        abstract="true">        <property name="transactionManager">            <ref bean="transactionManager"/>        </property>        <property name="proxyTargetClass">                    <value>true</value>        </property>      ....      </bean>

     又讨论了一下这样的效率问题, 因为这些Service Bean都是单例,效率应该不受影响。

相关文章:1.简化Spring--配置文件2.简化Spring--View层3.简化Spring--Model层4.简化Spring Controller至所有MVC方案中最简5.简化spring--减少不必要的基于接口编程




返回类别: 教程
上一教程: java defunct产生的原因和解决办法
下一教程: 持续集成 Java手册

您可以阅读与"简化spring(5)--减少不必要的基于接口编程"相关的教程:
· SPRING 编程入门十大问题解答
· 《Java编程思想》(第二版)第08章:接口与内隐类
· 基于范型的java函数式编程(一)
· java中的基于套结字(socket)的通信 一. 一个双人单方向通信例子
· 构建自己的基于Java的超级计算机
    微笑服务 优质保证 索取样品