论坛首页 Java版 Struts

适配器模式在Spring+hibernate+struts框架中的应用

浏览 3910 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2004-11-12
前久写了一贴:"代理模式在Spring+hibernate+struts框架中的应用",引起了比较广泛的讨论,虽然丢砖头的不少,呵呵.

此外在Spring+hibernate+struts框架中,我比较广泛地用到了"适配器模式".故讨论一下.

为了让代码通用,在Spring+hibernate+struts中,我做了个baseDao和baseService类,这两个类是通用的对表维护的操作.这样大多数表维护的代码,只要这两个类就可以了.

当有BUSINESS OBJECT时,从baseService继承产生一个businessServiceIMP类,这时运用"适配器模式",定义IbusinessService接口.
这样就能让接口代码简化.达到了运用适配器模式的目的.
再加上Spring+hibernate+struts框架的优点,可以灵活把DAO层,和SERVICE层的任意类更换掉,相当灵活,举一个Spring+hibernate+struts的配置例子如下:

[code:1]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<!-- ========================= Start of PERSISTENCE DEFINITIONS ========================= -->

<!-- Choose the dialect that matches your "dataSource" definition -->

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>org.gjt.mm.mysql.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/oa?useUnicode=true&characterEncoding=GBK&autoReconnect=true</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value></value>
</property>
</bean>

<bean id="mySessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>oa/pojo/Auth.hbm.xml</value>
<value>oa/pojo/Card.hbm.xml</value>
<value>oa/pojo/Fast.hbm.xml</value>
<value>oa/pojo/Fax.hbm.xml</value>
<value>oa/pojo/Note.hbm.xml</value>
<value>oa/pojo/Plan.hbm.xml</value>
<value>oa/pojo/User.hbm.xml</value>
</list>
</property>

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
</props>
</property>

<property name="dataSource"><ref bean="myDataSource"/></property>
</bean>



<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory"><ref local="mySessionFactory"/></property>
</bean>


<!-- Base DAO : Hibernate implementation -->
<bean id="baseDAO" class="common.spring.dao.BaseDAOImpl">
<property name="sessionFactory"><ref local="mySessionFactory"/></property>
</bean>

<!-- Base primary business object implementation -->
<bean id="baseServiceSpring" class="common.spring.service.BaseServiceSpringImpl">
<property name="baseDAO"><ref local="baseDAO"/></property>
</bean>

<!-- Base SERVICE -->
<bean id="baseService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="myTransactionManager"/></property>
<property name="target"><ref local="baseServiceSpring"/></property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly,-BaseServiceException</prop>
<prop key="set*">PROPAGATION_REQUIRED,-BaseServiceException</prop>
<prop key="modify*">PROPAGATION_REQUIRED,-BaseServiceException</prop>
<prop key="remove*">PROPAGATION_REQUIRED,-BaseServiceException</prop>
</props>
</property>
</bean>


<!-- logon primary business object implementation -->
<bean id="logonServiceSpring" class="common.spring.service.LogonServiceSpringImpl">
<property name="baseDAO"><ref local="baseDAO"/></property>
</bean>

<!-- logon SERVICE -->
<bean id="logonService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="myTransactionManager"/></property>
<property name="target"><ref local="logonServiceSpring"/></property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly,-BaseServiceException</prop>
<prop key="set*">PROPAGATION_REQUIRED,-BaseServiceException</prop>
<prop key="modify*">PROPAGATION_REQUIRED,-BaseServiceException</prop>
<prop key="remove*">PROPAGATION_REQUIRED,-BaseServiceException</prop>
</props>
</property>
</bean>

</beans>

[/code:1]
   
时间:2004-11-13
我们也是采用basedao,baseservice,当时是跟一个同事一起想的,发现大家都走到一块了。另外,在basedaoimpl再加上一些对hibernatetemplate的操作的封装。事务配置那快可以用parent继承属性啊。
   
0 请登录后投票
时间:2004-11-14
nihongye 写道
事务配置那快可以用parent继承属性啊。


请详细描述一下! 谢谢!
   
0 请登录后投票
时间:2004-11-24
这也是适配器??

没看出来.
   
0 请登录后投票
时间:2004-11-24
定义一个父亲:
<bean id="transcation" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED,-MyCheckedException</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

定义子:

<bean id="transcation" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="target"><ref bean="xx"></property>
</bean>

另外在我的例子中,没有定义出baseservice,只是在class中进行继承。
   
0 请登录后投票
时间:2004-11-24
dhj1 写道
为了让代码通用,在Spring+hibernate+struts中,我做了个baseDao和baseService类,这两个类是通用的对表维护的操作.这样大多数表维护的代码,只要这两个类就可以了.

当有BUSINESS OBJECT时,从baseService继承产生一个businessServiceIMP类,这时运用"适配器模式",定义IbusinessService接口.
这样就能让接口代码简化.达到了运用适配器模式的目的.


没看懂。baseService是干吗用的?为什么要平白多出这么一个东西?
   
0 请登录后投票
论坛首页 Java版 Struts

跳转论坛:
JavaEye推荐