常言笑的家

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

          My Links

          Blog Stats

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 孝感市| 庐江县| 成安县| 那曲县| 文安县| 香河县| 华亭县| 泊头市| 天门市| 乌鲁木齐市| 漳平市| 偏关县| 杭锦旗| 凤冈县| 城固县| 垫江县| 汉中市| 内丘县| 隆林| 平安县| 白玉县| 福泉市| 盐亭县| 益阳市| 龙泉市| 澎湖县| 彝良县| 建瓯市| 娱乐| 青岛市| 临西县| 无为县| 呼图壁县| 老河口市| 松江区| 靖西县| 安康市| 大港区| 南通市| 南汇区| 明光市|