在如下方面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
如JDBC
JDO
JTA等等
基於以上發現
建議在下一項目中采用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=
examples
ExampleBean
/>
HiveMind:
Define an interface and core implementation POJO
配置文件
service
point元素
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:
在配置文件中使用set
service元素
<set
service service
id=
anotherService
/>
Comments:
在更換實現時
HiveMind因強制針對接口編程而占有優勢
* Intializing and finalizing methods?
Spring :
<bean id=
exampleInitBean
class=
examples
ExampleBean
init
method=
init()
destroy
method=
cleanup()
/>
/>
HiveMind:
<construct class=
initialize
method=
/>
不支持finalizing method
Comments:
Spring略優
* How to configure AOP?
Spring:
<!
Step
: 定義核心實現
>
<bean id=
personTarget
class=
com
mycompany
PersonImpl
>
<property name=
name
><value>Tony</value></property>
<property name=
age
><value>
</value></property>
</bean>
<!
Step
: 定義Interpreter
>
<bean id=
myAdvisor
class=
com
mycompany
MyAdvisor
>
<property name=
someProperty
><value>Custom string property value</val></property>
</bean>
<bean id=
debugInterceptor
class=
org
springframework
aop
interceptor
Nop
Interceptor
>
</bean>
<!
Step
: 定義接口
>
<bean id=
person
class=
org
springframework
aop
framework
ProxyFactoryBean
>
<property name=
proxyInterfaces
><value>com
mycompany
Person</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:
<!
定義接口
>
<service
point id=
Adder
interface=
slhynju
doconline
business
Adder
>
<!
構造核心實現
>
<invoke
factory>
<construct class=
slhynju
doconline
business
AdderImpl
>
<set
service property=
sessionSource
service
id=
SessionSource
/>
</construct>
</invoke
factory>
<!
聲明引用 interpreter
>
<interceptor service
id=
hivemind
LoggingInterceptor
/>
<interceptor service
id=
TransactionInterceptor
/>
</service
point>
Comments:
Spring將接口和核心實現分開定義成兩個bean
HiveMind則統一定義成一個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=
org
springframework
samples
jpetstore
dom
ain
logic
PetStoreImpl
>
<property name=
accountDao
><ref bean=
accountDao
/></property>
<!
Other dependencies omitted
>
</bean>
<bean id=
petStore
class=
org
springframework
transaction
interceptor
TransactionProxyFac
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_REQUIRED
readOnly</prop>
</props>
</property>
</bean>
HiveMind: 沒有內建支持
我自行開發了一個TransactionInterceptor
<interceptor service
id=
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