Spring、Struts2、Hibernate集成开发

    技术2025-10-13  11

           只要是JavaEE开发那必然会牵扯到三大框架整合开发,当然绝大多数公司都有自己的框架,而且把三大框架都整合好了,你可能只需简单的配置就可以用了,但是你还是要会最基础的三大框架整合,下面我们就简略的说一下。

     

    版本:spring2.5 + struts2.1.6 + hibernate3.2

     

    整合主要步骤:

    一、Spring整合Struts2

    1、  web.xml

           加载AppliationContext采用listener方式:

           <context-param>

                  <param-name>contextConfigLocation</param-name>

                  <param-value>

                         /WEB-INF/spring-config/applicationContext.xml

                  </param-value>

           </context-param>

           <listener>

                  <listener-class>

                         org.springframework.web.context.ContextLoaderListener

                  </listener-class>

           </listener>

           <!-- 配置struts2前端控制器 -->

           <filter>

                  <filter-name>struts2</filter-name>

                  <filter-class>

                         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

                  </filter-class>

           </filter>

     

           <filter-mapping>

                  <filter-name>struts2</filter-name>

                  <url-pattern>*.action</url-pattern>

           </filter-mapping>

     

    2、  struts.xml

           添加Actionspring创建

           <constant name="struts.objectFactory" value="spring" />

           注意:Action中的class是个逻辑名称要与applicationbean id名一样

    具体代码如下:

    <struts>

           <constant name="struts.objectFactory" value="spring" />

           <package name="user" extends="struts-default">

                  <action name="login" method="login" class="LoginAction">

                         <result name="success">/success.jsp</result>

                  </action>

           </package>

    </struts>

     

    3 applicationContext.xml

           实际处理的Actionscope="prototype",该属性说明Action可以生成多个 

    具体代码如下:

           <bean id="LoginAction" scope="prototype" class="action.LoginAction" />

    <!--以上完成了Struts2Spring的整合-->

     

    二、Spring整合Hibernate

    以下配置全部是在applicationContext.xml

    1、配置数据源

    Spring内置实现 DriverManagerDataSource      

           <bean id="dataSource"

                  class="org.springframework.jdbc.datasource.DriverManagerDataSource">

                  <property name="driverClassName">

                         <value>com.mysql.jdbc.Driver</value>

                  </property>

                  <property name="url">

                         <value>jdbc:mysql://localhost:3306/test</value>

                  </property>

                  <property name="username">

                         <value>root</value>

                  </property>

                  <property name="password">

                         <value></value>

                  </property>

           </bean>

     

    2、配置sessionFactory

           <bean id="sessionFactory"

                  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

                  <property name="dataSource">

                         <ref bean="dataSource" />

                  </property>

                  <property name="mappingResources">

                         <list>

                                <value>domain/User.hbm.xml</value>

                         </list>

                  </property>

                  <property name="hibernateProperties">

                         <props>

                                <prop key="hibernate.dialect">

                                       org.hibernate.dialect.MySQLDialect

                         </prop>

                                <prop key="hibernate.show_sql">true</prop>

                         </props>

                  </property>

           </bean>

     

    3、配置Dao

           <bean id="userDao" class="dao.UserDaoHibernateImpl">

                  <property name="sessionFactory">

                         <ref bean="sessionFactory" />

                  </property>

           </bean>

    注意:以上配置是要求Dao 必须继承自HibernateDaoSupport

     

    4、事务:

           Spring事务机制

                  声明式事务、事务管理器

           配置事务管理器

           <bean id="transactionManager"

                  class="org.springframework.orm.hibernate3.HibernateTransactionManager">

                  <property name="sessionFactory">

                         <ref bean="sessionFactory" />

                  </property>

           </bean>

           <!-- TransactionAdvice -->

           <tx:advice id="txAdvice" transaction-manager="transactionManager">

                  <tx:attributes>

                         <tx:method name="update*" propagation="REQUIRED" />

                         <tx:method name="*" propagation="SUPPORTS" read-only="true" />

                  </tx:attributes>

           </tx:advice>

           <!--通过AOP 完成织入 -->

           <aop:config>

                  <aop:advisor pointcut="execution(* service.*(..))"

                         advice-ref="txAdvice" />

           </aop:config>

     

    以上完成了整个SSH的整合

     

    下面补充SpringJDBC的整合

    数据源的配置同上

           <bean id="userDao" class="dao.userDaoImpl">

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

           </bean>

           <!-- 注意:以上配置是要求dao 继承JdbcDaoSupport -->

           <!-- JDBC事务配置,TransactionManager依赖于dataSource -->

           <!-- TransactionManager -->

           <bean id="transactionManager"

                  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

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

           </bean>

           <!-- TransactionAdvice -->

           <tx:advice id="tsAdvice" transaction-manager="transactionManager">

                  <tx:attributes>

                         <tx:method name="*" propagation="REQUIRED" />

                  </tx:attributes>

           </tx:advice>

           <!-- 通过AOP 完成织入 -->

           <aop:config>

                  <aop:pointcut id="pc" expression="execution(* dao.userDao.*(..))" />

                  <aop:advisor advice-ref="tsAdvice" pointcut-ref="pc" />

           </aop:config>

     

    最新回复(0)