常言笑的家

          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 常言笑 閱讀(553) 評論(0)  編輯  收藏 所屬分類: JAVA/J2EE

          My Links

          Blog Stats

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 马边| 佛坪县| 淮阳县| 林西县| 哈密市| 桑植县| 视频| 淄博市| 漠河县| 咸丰县| 巩留县| 临安市| 招远市| 衢州市| 交口县| 德化县| 突泉县| 河间市| 曲阳县| 铁力市| 尉犁县| 祁阳县| 滁州市| 镶黄旗| 康定县| 莆田市| 肃南| 建宁县| 屏东县| 龙南县| 宝鸡市| 灵宝市| 南郑县| 九台市| 陇川县| 达日县| 抚顺县| 邵阳市| 涟源市| 老河口市| 平武县|