浏览 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] 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2004-11-13
我们也是采用basedao,baseservice,当时是跟一个同事一起想的,发现大家都走到一块了。另外,在basedaoimpl再加上一些对hibernatetemplate的操作的封装。事务配置那快可以用parent继承属性啊。
|
|
| 返回顶楼 | |
|
时间:2004-11-14
nihongye 写道 事务配置那快可以用parent继承属性啊。
请详细描述一下! 谢谢! |
|
| 返回顶楼 | |
|
时间:2004-11-24
这也是适配器??
没看出来. |
|
| 返回顶楼 | |
|
时间: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中进行继承。 |
|
| 返回顶楼 | |
|
时间:2004-11-24
dhj1 写道 为了让代码通用,在Spring+hibernate+struts中,我做了个baseDao和baseService类,这两个类是通用的对表维护的操作.这样大多数表维护的代码,只要这两个类就可以了.
当有BUSINESS OBJECT时,从baseService继承产生一个businessServiceIMP类,这时运用"适配器模式",定义IbusinessService接口. 这样就能让接口代码简化.达到了运用适配器模式的目的. 没看懂。baseService是干吗用的?为什么要平白多出这么一个东西? |
|
| 返回顶楼 | |








