熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Spring VS. HiveMind 優點缺點大比拼

2022-06-13   來源: Java開源技術 

  在如下方面HiveMind優於Spring:
  
  * HiveMind強制針對接口編程
  
  * HiveMind使用module概念來分組管理service利於並行和迭代開發
  
  * HiveMind使用的配置文件格式更清楚簡明特別是將接口和實現統一定義成個service而Spring可能要定義好幾個bean元素
  
  * 在增加或移去interceptor時HiveMind只要修改行配置文件而Spring至少要修改兩個bean元素
  
  * 在定義interceptor時HiveMind采用javassist類庫性能優於Spring采用的JDK proxy
  
  在如下方面Spring優於HiveMind:
  
  * Spring的AOP框架較為成熟編寫interceptor的難度較低
  
  * Spring內建和Hibernate的集成HiveMind尚未內建該集成
  
  * Spring的transaction management支持各種transaction API如JDBCJDOJTA等等
  
  基於以上發現建議在下一項目中采用HiveMind因為已經自行開發了HiveMind和Hibernate的集成以及簡單的transaction management代碼因而在下一項目中並不特別需要Spring的相應功能不過當前HiveMind是rc一旦發布release版則應盡快升級
  
  [Spring VS HiveMind]:
  
  * Service Oriented?
  Spring : Yes
  HiveMind : Yes
  
  * How to define a Service?
  Spring :
  Define a POJO (在Spring術語中稱之為bean但實際上是POJO
  
  配置文件<bean id=exampleBean class=examplesExampleBean/>
  HiveMind:
  Define an interface and core implementation POJO
  
  配置文件servicepoint元素
  Comments:
  HiveMind強制針對接口編程優於Spring
  
  * 是否提供service的namespace?
  Spring:
  僅僅使用id屬性來唯一識別service
  支持多配置文件
  HiveMind:
  提供Module概念用於管理service namespace類似於java中的package
  支持多個配置文件
  Comments:
  HiveMind略優
  
  * Service Lifecycle?
  Spring:
   Lifecycle models: Singleton Prototype
  HiveMind:
   Lifecycle models: Primitive Singleton Threaded Pooled
  Comments
  最常用的就是Singleton模型雖然HiveMind模型多於Spring但不構成優勢
  
  * Who manages service?
  Spring: BeanFactory or ApplicationContext
  HiveMind: Registry
  
  * Dependency Injection?
  Spring: yes type and type supported
  HiveMind: yes type and type supported
  
  * Service Depenency Injection?
  Spring:
  使用ref元素
  <property name=beanOne><ref bean=anotherExampleBean/></property>
  HiveMind:
  在配置文件中使用setservice元素
  <setservice serviceid=anotherService/>
  Comments:
  在更換實現時HiveMind因強制針對接口編程而占有優勢
  
  * Intializing and finalizing methods?
  Spring :
  <bean id=exampleInitBean class=examplesExampleBean
  initmethod=init()
  destroymethod=cleanup()/>
  />
  HiveMind:
  <construct class= initializemethod=/>
  不支持finalizing method
  Comments:
  Spring略優
  
  * How to configure AOP?
  Spring:
  <! Step : 定義核心實現 >
  <bean id=personTarget class=commycompanyPersonImpl>
  <property name=name><value>Tony</value></property>
  <property name=age><value></value></property>
  </bean>
  <! Step : 定義Interpreter >
  <bean id=myAdvisor class=commycompanyMyAdvisor>
  <property name=someProperty><value>Custom string property value</val></property>
  </bean>
  <bean id=debugInterceptor class=orgspringframeworkaopinterceptorNop
  
  Interceptor>
  </bean>
  <! Step : 定義接口 >
  <bean id=person
  class=orgspringframeworkaopframeworkProxyFactoryBean
  >
  <property name=proxyInterfaces><value>commycompanyPerson</value></
  
  property>
  <property name=target><ref local=personTarget/></property>
  <! Step : 聲明引用 interpreter >
  <property name=interceptorNames>
  <list>
  <value>myAdvisor</value>
  <value>debugInterceptor</value>
  </list>
  </property>
  </bean>
  
  HiveMind:
  <! 定義接口 >
  <servicepoint id=Adder interface=slhynjudoconlinebusinessAdder>
  <! 構造核心實現 >
  <invokefactory>
  <construct class=slhynjudoconlinebusinessAdderImpl>
  <setservice property=sessionSource serviceid=SessionSource />
  </construct>
  </invokefactory>
  <! 聲明引用 interpreter >
  <interceptor serviceid=hivemindLoggingInterceptor/>
  <interceptor serviceid=TransactionInterceptor/>
  </servicepoint>
  Comments:
  Spring將接口和核心實現分開定義成兩個beanHiveMind則統一定義成一個service
  
  這點上HiveMind優於Spring
  
  Spring的AOP框架較為成熟HiveMin的Interpreter factory仍需要降低編寫難度
  
  HiveMind采用javassist性能上優於Spring采用JDK proxy
  
  * How to configure declarative transaction management?
  
  Spring: 采用AOP
  
  <bean id=petStoreTarget class=orgspringframeworksamplesjpetstoredom
  
  ainlogicPetStoreImpl>
  <property name=accountDao><ref bean=accountDao/></property>
  <! Other dependencies omitted >
  </bean>
  
  <bean id=petStore
  class=orgspringframeworktransactioninterceptorTransactionProxyFac
  
  toryBean>
  <property name=transactionManager><ref bean=transactionManager/></
  
  property>
  <property name=target><ref local=petStoreTarget/></property>
  <property name=transactionAttributes>
  <props>
  <prop key=insert*>PROPAGATION_REQUIRED</prop>
  <prop key=update*>PROPAGATION_REQUIRED</prop>
  <prop key=*>PROPAGATION_REQUIREDreadOnly</prop>
  </props>
  </property>
  </bean>
  
  HiveMind: 沒有內建支持我自行開發了一個TransactionInterceptor
  <interceptor serviceid=TransactionInterceptor>
  <include method=add*/>
  </interceptor>
  
  Comments:
  在Spring中如果需要混合使用TransactionInterceptor和其他Interceptor需要定義多個bean增大了維護成本
  Spring支持JTA等各種Transaction manager
  HiveMind配置文件更加清楚簡明但不沒有提供JTA集成很致命
  

From:http://tw.wingwit.com/Article/program/Java/ky/201311/27989.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.