zoukankan      html  css  js  c++  java
  • 转 Spring是如何管理Hibernate和Struts的(一)

     

    项目做完了,总结一下.该项目是利用SSH技术实现的.下面来谈谈Spring是如何管理Struts2和hibernate的.

    一:

       先说说Spring是如何运作的吧. 在tomcat启动的时候, 先会在web.xml中加载两个句话,

    Web.xml代码  收藏代码
    1. <context-param>  
    2.   
    3.    <param-name>contextConfigLocation</param-name>  
    4.   
    5.    <param-value>classpath:applicationContext.xml</param-value>  
    6.   
    7. </context-param>  
    Java代码  收藏代码
    1. <listener>  
    2.   <listener-class>  
    3.      org.springframework.web.context.ContextLoaderListner  
    4.    </listener-class>  
    5. </listener>  

    在这里,ContextLoaderListener继承了ServletContextListener.因此,Spring会根据 contextConfigLocation所指的Applicationcontext.xml自动装配xml文件中所用到的bean对象.

    在applicationcontext.xml中bean的定义如下

    Applicationcontext.xml代码  收藏代码
    1. <bean id="user" class="com.test.User" abstract="false" parent="people" scope="prototype">  
    2.    <property name="dept" ref="dept"  ></property>  
    3. </bean>  
    4.    

    当id中需要包含斜杠"/" 等特殊字符时,要将id换乘name的同等的. 还有一个特别说明的是,这里的id和name的值必须是唯一的.

    二: Spring是如何管理hibernate的.以及Spring管理的事务.

       Spring加载之后,会根据applicationcontext.xml文件中的配置来装配实例.

      

    Java代码  收藏代码
    1. <bean name="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
    2.    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>  
    3.     </bean>  

      他会根据hibernate.cfg.xml所配置的加载hibernate配置信息.并实例化sessionFactory.并且如果Dao要受Spring管理, 那么此Dao类需要继承HibernateDaoSupport.

    Spring提供的事务管理有两种方式,编程式的和申明式的. 编程式的繁琐,我一般不喜欢用.最喜欢的一种是利用Spring封装的aspectJ, 利用Aop来管理事务很方便的.

    首先创建一个事务管理器

    Java代码  收藏代码
    1. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    2.     <property name="sessionFactory" ref="sessionFactory">  
    3.     </property>  
    4. </bean>  

    声明一个通知, 并声明此通知受某一个事务管理器管理

    Java代码  收藏代码
    1. <tx:advice id="txAdvice" transaction-manager="transactionManager">  
    2. <tx:attributes>  
    3.    <tx:method name="save*" />  
    4.    <tx:method name="*" readonly="true" />  
    5. </tx:attributes>  
    6. </tx:advice>  

    上面的一段话说明了txAdvice受transactionManager事务管理器管理, 并且管理save打头的方法. 其余的都不使用事务管理.

    最后利用advisor配置advice的切入点.

    Java代码  收藏代码
    1. <aop:config>  
    2.   <aop:advisor advice-ref="txAdvice" pointcut="execution(pulic * *..*.service.*.*(..))">  
    3.    </aop:advisor>  
    4. </aop:config>  

    这样, 只要经过service层就会进入事务管理.

  • 相关阅读:
    ARC 没有自动释放内存
    查看python的路径
    django 一些库
    实现点击按钮,出现隐藏布局
    蓝牙的开启以及搜索
    退出当前程序(应用)的小提示
    删除SharedPreferences的存储记忆
    BaseAdapter和SimpleAdapter的区别
    数据类型
    交互与注释
  • 原文地址:https://www.cnblogs.com/janeaiai/p/5731487.html
Copyright © 2011-2022 走看看