常言笑的家

          Spring, Hibernate, Struts, Ajax, RoR

          如何去除Spring中的面向接口的編成

              眾所周知,Spring是提倡基于接口編程的。
              但有些Manager類,比如SaleOrderManager ,只有5%的機會再有另一個Impl實現。95%時間里這兩兄弟站一起,就像C++里的.h和.cpp,徒增維護的繁瑣(經常要同步兩個文件的函數聲明),和代碼瀏覽跳轉時的不便(比如從Controler類跟蹤到Service類時,只能跳轉到接口類的相應函數,還要再按一次復雜的熱鍵才跳轉到實現類)
              連Martin Flower都說,強制每個類都分離接口和實現是過猶不及。只在有多個獨立實現,或者需要消除對實現類的依賴時,才需要分離接口。

              DAO被強制用接口的原因
              Spring IOC本身是不會強制基于接口的,但DAO類一般要使用Spring的聲明式事務機制,而聲明式的事務機制是使用Spring AOP來實現的。Spring AOP的實現機制包括動態代理和Cgilib2,其中Spring AOP默認使用的Java動態代理是必須基于接口,所以就要求基于接口了。
              
              解決方法
              那就讓Spring AOP改用CGLib2,生成目標類的子類吧,我們只要指定使用聲明式事務的FactoryBean使用CGLib的方式來實現AOP,就可以不基于接口編程了。
              指定的方式為設置proxyTargetClass為true。如下:
          <bean class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
          id
          ="baseService"   abstract="true">
            
          <property name="transactionManager" ref="transactionManager"/>
            
          <property name="proxyTargetClass" value="true"/>

          </bean>

               又因為這些Service Bean都是單例,效率應該不受影響。

          posted on 2006-12-19 13:05 常言笑 閱讀(552) 評論(0)  編輯  收藏 所屬分類: JAVA/J2EE

          My Links

          Blog Stats

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南安市| 淄博市| 和静县| 北海市| 益阳市| 侯马市| 内乡县| 德钦县| 佛教| 兴山县| 水城县| 手游| 内乡县| 广元市| 平利县| 司法| 灵石县| 资溪县| 鄱阳县| 娱乐| 扶风县| 田东县| 崇义县| 通州市| 基隆市| 宾阳县| 齐齐哈尔市| 伊宁县| 灵台县| 英德市| 成武县| 通州区| 桑植县| 斗六市| 甘南县| 泌阳县| 临泽县| 武功县| 正宁县| 于田县| 辽宁省|