捷凌网安JAVA频道
捷凌IT教育
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME 开源技术 其他技术 论坛
 您现在的位置: 捷凌网安 >> Java >> 开源技术 >> Struts >> 正文
Struts 2, spring 2, hibernate 的整合

作者:佚名 责任编辑:左决 点击数: 更新时间:2008-4-30 3:53:59

   一.struts 2 与 spring2

    struts2 本身就采用了类似于spring的IOC容器机制,可以利用struts2官方提供的插件struts2-spring-plugin-2.0.11.1.jar,直接与spring进行整合,配置文件中只需要设置
    struts.objectFactory=spring
    这样,就将struts2的对象管理交给了spring2的IOC容器。
    在struts.xml中配置的action
    <package name="maintaince" extends="struts-default">
    <action name="serverInfoList" class="serverInfoService" method="getAllServersInfo">
    <result name="list">/jsp/server_info/server_info_list.jsp</result>
    </action>

            在spring的配置文件中配置的bean
    <bean id="serverInfoService" class="com.wod.service.impl.ServerInfoServiceImpl">
                <property name="serverInfoDao" ref="serverInfoDao"/>
                <property name="sib" ref="serverInfoBean"/>
             </bean>
                  可以看出,struts2可以直接只用在spring2中配置的bean,引用过来作为action。
                  这样struts2就可以跑在spring2里面了.

                  另外,在web.xml中还有这些内容:
                    <context-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:properties/work-assistant*.xml</param-value>
            </context-param>
            加载spring的配置文件
            <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
            </listener>
            设置spring的context listener
            <filter>
                <filter-name>struts2</filter-name>
                <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
            </filter>
            <filter-mapping>
                <filter-name>struts2</filter-name>
                <url-pattern>/*</url-pattern>
            </filter-mapping>
            设置struts2的dispatcher。

    二.hibernate3 与 spring2
   
    spring 与 hibernate结合的时候,配置文件修改比较多。首先是hibernate的自身的配置被集成到了spring的配置文件中了.

    1.配置datasource:
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
            p:driverClassName="${hibernate.connection.driver_class}"
            p:url="${hibernate.connection.url}"
            p:username="${hibernate.connection.username}"
        p:password="${hibernate.connection.password}"/>
    2.配置sessionFactory
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" scope="prototype">
            <property name="dataSource" ref="dataSource" />
            <property name="annotatedClasses"><!-- or use <property name="annotatedPackages"> -->
                <list>
                    <value>com.wod.bean.Application</value>
                </list>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.hbm2ddl.auto">create</prop>
                    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                    <prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
                </props>
            </property>
            <property name="eventListeners">
                <map>
                    <entry key="merge">
    <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/>
                    </entry>
                </map>
            </property>
        </bean>
        这两个bean是spring结合hibernate的最主要的两个bean.
        当这两个bean设置好了之后,就可以直接使用spring提供的”HibernateDaoSupport” ,直接使用封装好的hibernate特性,非常方便.
        <bean id="serverInfoDao" class="com.wod.db.hibernate.ServerInfoDAO">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        初始化一个DAO.
    public List<ServerInfoBean> getAllServersInfo() {
            List<ServerInfoBean> find = getHibernateTemplate().loadAll(ServerInfoBean.class);
            return find;
        }
        直接调用getHibernateTemplate()访问数据库
    三.Spring 事务的设置
   
        1.设置transactionManager
        <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
                p:sessionFactory-ref="sessionFactory"/>
        2.设置advice
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="find*" read-only="true"/>
                <tx:method name="get*" read-only="true"/>
                <tx:method name="list*" read-only="true"/>
                <tx:method name="*" rollback-for="Exception"/>
            </tx:attributes>
     </tx:advice>
        3.接下来设置AOP
    <aop:config>
           <aop:pointcut id="businessService" expression="execution(* com.hisoft.db.hibernate.impl.*.*(..))" />
            <aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" />
            <aop:aspect id="businessAspect" ref="AOPTest">
                 <aop:before pointcut-ref="businessService" method="before"/>
                 <aop:after-returning pointcut-ref="businessService" method="after"/>
            </aop:aspect>
    </aop:config>
    这个的意思是说,当执行到com.hisoft.db.hibernate.impl这个包下面的任何类的任何方法,而且不管参数是什么,也就是说这个包下面的所有方法调用了,都要接受前面的transactionManager的管理。

        4.AOP设置
    <bean id="AOPTest" class="com.wod.common.LogHandler.AOPTest"/>
    <aop:config>
            <aop:pointcut id="businessService" expression="execution(* com.hisoft.db.hibernate.impl.*.*(..))" />
            <aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" />
            <aop:aspect id="businessAspect" ref="AOPTest">
                 <aop:before pointcut-ref="businessService" method="before"/>
                 <aop:after-returning pointcut-ref="businessService" method="after"/>
            </aop:aspect>
    </aop:config>

    定义一个切面,叫做businessAspect,引用的是我前面定义的一个叫做AOPTest的类,然后下面的两句话:
            <aop:before pointcut-ref="businessService" method="before"/>
              <aop:after-returning pointcut-ref="businessService" method="after"/>
        aop:before 指的是在调用目标方法之前要干点事情,pointcut-ref="businessService"就是目标的方法,在调用匹配这个pointcut 的方法之前,会调用 method中定义的那个方法。

  • 上一篇文章:

  • 下一篇文章:
  •  
     最进更新
    普通文章J2SE实现windows读取网卡的物05-11
    普通文章Scala—Java的避难所之main(05-11
    普通文章Spring数据源的灵活配置巧应05-11
    普通文章Spring 与 Log4J 进行动态日05-11
    普通文章Heritrix的多线程ToeThread和05-11
    普通文章应用spring示例开发网站构思05-11
    普通文章Spring 数据源配置与应用05-11
    普通文章Spring中的四种声明式事务的05-11
    普通文章Hibernate+Spring搞定Clob、05-11
    普通文章Hibernate的映射关联关系05-11
     
     推荐文章
    推荐文章Java技术开源搜索引擎04-30
    推荐文章Eclipse中建立自己的JUnit测04-30
    推荐文章Eclipse 3.3上安装jadclipse04-30
    推荐文章spring 编程入门十大问题解答04-30
    推荐文章Java编程中Spring的一些负面04-30
    推荐文章Java应用中Hibernate对多表关04-30
    推荐文章关于hibernate的缓存和CRUD04-30
    推荐文章基于Struts1.2的动态多文件上04-30
    推荐文章演示Struts2实现简单上传代码04-30
    推荐文章J2EE学习笔记--Struts初步认04-30
     
     热点文章
    普通文章J2SE实现windows读取网卡的物05-11
    普通文章Scala—Java的避难所之main(05-11
    普通文章Spring数据源的灵活配置巧应05-11
    普通文章Spring 与 Log4J 进行动态日05-11
    普通文章Heritrix的多线程ToeThread和05-11
    普通文章应用spring示例开发网站构思05-11
    普通文章Spring 数据源配置与应用05-11
    普通文章Spring中的四种声明式事务的05-11
    普通文章Hibernate+Spring搞定Clob、05-11
    普通文章Hibernate的映射关联关系05-11

    | 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 友情链接 | 版权申明 | 网站地图 |

    在线交流 捷凌网安主群:51649627
    Copyright 2007-2008 © 捷凌网安. All rights reserved.
    备案序号:蜀ICP备08001812号