前久写了一贴:"代理模式在Spring+hibernate+struts框架中的应用",引起了比较广泛的讨论,虽然丢砖头的不少,呵呵.
此外在Spring+hibernate+struts框架中,我比较广泛地用到了"适配器模式".故讨论一下.
为了让代码通用,在Spring+hibernate+struts中,我做了个baseDao和baseService类,这两个类是通用的对表维护的操作.这样大多数表维护的代码,只要这两个类就可以了.
当有BUSINESS OBJECT时,从baseService继承产生一个businessServiceIMP类,这时运用"适配器模式",定义IbusinessService接口.
这样就能让接口代码简化.达到了运用适配器模式的目的.
再加上Spring+hibernate+struts框架的优点,可以灵活把DAO层,和SERVICE层的任意类更换掉,相当灵活,举一个Spring+hibernate+struts的配置例子如下:
- <?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>