ssh三大框架整合

Hibernate框架

  1 hibernate核心配置文件

    (0)orm思想

    - 对象关系映射

    (1)数据库信息

    (2)hibernate信息

    (3)映射配置

    (4)hibernate核心配置文件

    - 如果单纯使用hibernate框架,核心配置文件名称 hibernate.cfg.xml和位置 src下面 固定的

    - hibernate和spring整合时候,hibernate核心配置文件名称和位置没有固定要求的

  2 hibernate映射配置文件

    (1)实体类和数据库表映射关系—使用orm思想

  3 hibernate操作的步骤

    (1)在spring框架对hibernate框架进行封装,使用hibernateTemplate

Struts2框架

  1 Action操作

    (1)action创建三种方式

    - 继承类 ActionSupport

    (2)配置action访问路径

    - 创建struts.xml配置文件,这个文件名称和位置固定 src下面的

    (3)配置访问action的多个方法

    - 使用通配符方式配置

    (4)在action获取表单提交数据

    - 获取request对象

    ** 使用ServletActionContext类获取

    - 属性封装

    - 模型驱动(重点)

    - 表达式封装

    (5)在action操作域对象

    - 使用ServletActionContext获取域对象

    (6)配置struts2的过滤器

  2 值栈

    (1)向值栈放数据

    - set方法

    - push方法

    - 定义变量,生成get方法

    (2)从值栈获取数据

    - 在jsp中使用struts2标签+ognl获取

    - <s:property>

    - <s:iterator>

  3 拦截器

    (1)aop和责任链模式

    (2)自定义拦截器

    - 继承MethodFilterInterceptor

    - 重写类里面的方法

    - 配置拦截器和action关联

Spring框架

  1 spring核心配置文件

    (1)名称和位置没有固定要求

    (2)在spring核心配置文件中引入schema约束

  2 创建对象

    (1)xml配置方式:<bean  id=””  class=””  scope=””/>

    (2)注解方式:四个注解

  3 注入属性(对象类型属性)

    (1)xml配置方式:

    (2)注解方式:两个注解

    - autowired

    - resource

  3 使用ServletContext对象和监听器实现

    (1)在服务器启动时候,加载spring配置文件,创建对象

    (2)配置spring的监听器

    (3)指定spring配置文件位置

  4 jdbcTemplate

  5 spring事务配置

    (1)xml方式

    (2)注解方式

SSH框架整合思想

  1 三大框架应用在javaee三层结构

  2 struts2框架和spring整合

    (1)struts2的action在spring配置

  3 spring框架和hibernate框架整合

    (1)hibernate的sessionFactory交给spring配置

    (2)把hibernate数据库配置交给spring配置

整合struts2和spring框架

  1 把struts2的action交给spring管理

  2 实现过程

    第一步 导入struts2的jar包

    (1)导入用于整合的jar包

      (log4j.properties为log4j的日志输出格式,放入src下面)

    (2)Spring为了整合Struts还需要额外再导入一个jar包:(该包在struts的lib目录下)

        

    (3)导入Struts2的jar包(struts2版本为2.3.24):

        

    (4)创建Action

public class UserAction extends ActionSupport {

    public String execute() throws Exception {
        System.out.println("Success....");
        return NONE;
    }
}

    (5)创建Strut2的核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    
<struts>
    <package name="demo" extends="struts-default" namespace="/">
        <action name="userAction" class="com.wm.action.UserAction"></action>
    </package>

</struts>

    (6)在web.xml中配置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>/*</url-pattern>
  </filter-mapping>

    (7)导入Spring整合Web项目的jar包,也就是监控项目启动的监听器所在的jar包

      

    (8)创建Spring的核心配置文件并在其中引入约束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">

</beans>

    (9)把action交给Spring进行配置

  1 <!-- 配置action的对象 -->
  2 <!-- 注意action是多实例的,因此我们这里把scope配置为prototype的 -->
  3 <bean id="userAction" class="com.ssh.domain.UserAction" scope="prototype"></bean>

      ①在spring配置action对象,在struts.xml中也配置action对象

      ②解决:

        只需要在spring里面配置action对象,不要在struts.xml中配置

<struts>
    <package name="demo1" extends="struts-default" namespace="/">
        <!-- class属性里面不写action全路径了,因为写,action对象创建两次
            写spring配置的action的bean的id值
         -->
        <action name="userAction" class="userAction"></action>
    </package>
</struts>

       可以这样写的原因是我们导入了一个Spring整合Struts2的jar包:struts2-spring-plugin-2.3.24.jar

    (10)web.xml中Spring监听器的配置

  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:bean.xml</param-value>
  </context-param>

    (11)测试准备

      ① 所需的为Struts2的核心配置文件:struts.xml

      ②Spring的配置文件:bean.xml

      ③项目的配置文件:web.xml

      ④Struts2的UserAction类

      ⑤在UserAction中对UserService的调用

      ⑥UserService中对UserDao的调用

      ⑦UserDao类的编写

 struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="demo1" extends="struts-default" namespace="/">
        <!-- class属性里面不写action全路径了,因为写,action对象创建两次
            写spring配置的action的bean的id值
         -->
        <action name="userAction" class="userAction"></action>
    </package>
</struts>

bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">

    <bean id="userAction" class="com.wm.action.UserAction">
        <property name="userService" ref="userService"></property>
    </bean>
    
    <bean id="userService" class="com.wm.service.UserService">
        <property name="userDao" ref="userDaoImp"></property>
    </bean>
    
    <bean id="userDaoImp" class="com.wm.dao.UserDaoImp"></bean>

</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>spring-day4-ssh</display-name>
  
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:bean.xml</param-value>
      </context-param>
  
  <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>/*</url-pattern>
  </filter-mapping>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

UserAction.java

import com.opensymphony.xwork2.ActionSupport;
import com.wm.service.UserService;

public class UserAction extends ActionSupport {

    private UserService userService;    
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public String execute() throws Exception {
        userService.add();
        return NONE;
    }
}

UserService.java

public class UserService {

    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    
    public void add() {
        userDao.add();
    }
}

UserDao.java 其实现类

public class UserDaoImp implements UserDao {
    
    public void add() {
        System.out.println("UserDaoImp....");
    }
}

    (12) 测试结果:

          访问链接:http://localhost:8080/spring_struts2/userAction

          可以在后台观察到如下测试结果:

        image

          至此,Spring和Struts2的整合已经完毕,然后是Spring对Hibernate的整合了。

Spring框架整合hibernate框架

    1 把hibernate核心配置文件中配置数据库信息,把数据库信息在spring进行配置

    2 把hibernate里面的sessionFactory创建交给spring管理

  具体实现

    第一步 导入hibernate的jar包

    (1)导入struts2和hibernate的jar包时候有jar冲突问题

    在struts2里面有jar包

    

    在hibernate里面有jar包

    

      删除低版本的jar包

    (2)导入spring整合持久化层框架需要导入jar包

  

    第二步 搭建hibernate环境搭建

    1 创建实体类

public class User {
    
    private Integer uid;
    private String username;
    private String password;
    public Integer getUid() {
        return uid;
    }
    public void setUid(Integer uid) {
        this.uid = uid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

    2 配置实体类映射关系

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- 1 配置类和表对应 
        class标签
        name属性:实体类全路径
        table属性:数据库表名称
    -->
    <class name="com.wm.entity.User" table="t_user">
        <id name="uid" column="uid">
            <generator class="native"></generator>
        </id>
        <property name="username" column="username"></property>
        <property name="password" column="password"></property>
    </class>
</hibernate-mapping>

    3 创建核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
<!-- 第一部分: 配置数据库信息 必须的 -->
<!--         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///spring_day3</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property> -->
        
        <!-- 第二部分: 配置hibernate信息  可选的-->
        <!-- 输出底层sql语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 输出底层sql语句格式 -->
        <property name="hibernate.format_sql">true</property>
        <!-- hibernate帮创建表,需要配置之后 
            update: 如果已经有表,更新,如果没有,创建
        -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 配置数据库方言
            在mysql里面实现分页 关键字 limit,只能使用mysql里面
            在oracle数据库,实现分页rownum
            让hibernate框架识别不同数据库的自己特有的语句
         -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        
        
        <!-- 第三部分: 把映射文件放到核心配置文件中 必须的-->
        <mapping resource="com/wm/entity/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

    第三步 把hibernate核心配置文件数据库配置,在spring进行配置

    (1)把hibernate核心文件中数据库配置去掉了,在spring配置

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql:///spring_day3"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

    第四步 把hibernate的sessionFactory交给spring配置

    (1)服务器启动时候,加载spring配置文件,把配置文件中对象创建

    (2)把sessionFactory对象创建在spring配置

    (3)因为创建sessionFactory代码不是new出来的,而是多行代码实现的

// 首先在静态代码块中生成出sessionFactory
static {
    try {
        configuration.configure(configFile);
        sessionFactory = configuration.buildSessionFactory();
    } catch(Exception e) {
        System.err.println("%%%% Error Creating SessionFactory %%%%");
        e.printStackTrace();
    }
}

    (4)spring里面针对上面情况,封装类,配置类对象可以创建sessionFactory

    <!-- sessionFactory创建交给spring管理 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!-- 因为在hibernate核心配置文件中,没有数据库配置,数据库配置在spring里面配置,注入dataSource -->
        <property name="dataSource" ref="dataSource"></property>
        
        <!-- 指定使用hibernate核心配置文件 -->
        <property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
    </bean>

    第五步 在dao里面使用hibernateTemplate

public class UserDaoImp implements UserDao {
    
    private HibernateTemplate hibernateTemplate;    
    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;
    }

    public void add() {
        User user = new User();
        user.setUsername("lili");
        user.setPassword("123");
        hibernateTemplate.save(user);
        System.out.println("UserDaoImp....");
    }
} 

    bean.xml中配置

    <!-- 创建hibernateTemplate对象 -->
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
        <!-- 注入sessionFactory -->
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    没有配置事务,做操作时候,出现异常

    第六步 配置事务

    <!-- 第一步 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <!--注入sessionFactory-->
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    
    <!-- 第二步 开启事务注解 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

完整:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    <!-- 配置c3p0连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 注入属性值 -->
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql:///spring_day3"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    
    <!-- sessionFactory创建交给spring管理 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!-- 因为在hibernate核心配置文件中,没有数据库配置,数据库配置在spring里面配置,注入dataSource -->
        <property name="dataSource" ref="dataSource"></property>
        
        <!-- 指定使用hibernate核心配置文件 -->
        <property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
    </bean>
    
    <!-- 第一步 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <!--注入sessionFactory-->
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    
    <!-- 第二步 开启事务注解 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    
    <!-- 配置action的对象 -->
    <bean id="userAction" class="cn.itcast.action.UserAction" scope="prototype">
        <!-- 注入service -->
        <property name="userService" ref="userService"></property>
    </bean>
    
    <!-- 创建service对象 -->
    <bean id="userService" class="cn.itcast.service.UserService">
        <!-- 注入dao 
            接口 = 实现类对象
        -->
        <property name="userDao" ref="userDaoImpl"></property>
    </bean>
    
    <!-- 创建实现类对象 -->
    <bean id="userDaoImpl" class="cn.itcast.dao.UserDaoImpl">
        <property name="hibernateTemplate" ref="hibernateTemplate"></property>
    </bean>
    
    <!-- 创建hibernateTemplate对象 -->
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
        <!-- 注入sessionFactory -->
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
</beans>

SSH框架整合过程

  第一步 导入jar包

  第二步 搭建struts2环境

    (1)创建action,创建struts.xml配置文件,配置action

    (2)配置struts2的过滤器

  第三步 搭建hibernate环境

    (1)创建实体类

    (2)配置实体类和数据库表映射关系

    (3)创建hibernate核心配置文件

    - 引入映射配置文件

  第四步 搭建spring环境

    (1)创建spring核心配置文件

    (2)让spring配置文件在服务器启动时候加载

    - 配置监听器

    - 指定spring配置文件位置

  第五步 struts2和spring整合

    (1)把action在spring配置(action多实例的)

    (2)在struts.xml中action标签class属性里面写 bean的id值

  第六步 spring和hibernate整合

    (1)把hibernate核心配置文件中数据库配置,在spring里面配置

    (2)把hibernate的sessionFactory在spring配置

  第七步 在dao里面使用hibernateTemplate

    (1)在dao注入hibernateTemplate对象

    (2)在hibernateTemplate对象中注入sessionFactory

  第八步 配置事务

整合其他方式

  1 spring整合hibernate时候,可以不写hibernate核心配置文件

    (1)把hibernate核心配置文件中,基本信息配置和映射引入都放到spring配置

    <!-- sessionFactory创建交给spring管理 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!-- 因为在hibernate核心配置文件中,没有数据库配置,数据库配置在spring里面配置,注入dataSource -->
        <property name="dataSource" ref="dataSource"></property>
        
        <!-- 指定使用hibernate核心配置文件 -->
        <!-- <property name="configLocations" value="classpath:hibernate.cfg.xml"></property> -->
        
        <!-- 配置hibernate基本信息 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            </props>
        </property>
        
        <!-- 配置映射文件引入 -->
        <property name="mappingResources">
            <list>
                <value>cn/itcast/entity/User.hbm.xml</value>
                <!-- <value>....</value> -->
            </list>
        </property>

Spring分模块开发

  1 在spring里面配置多个内容,造成配置混乱,不利用维护

  2 把spring核心配置文件中,一部分配置放到单独的配置文件中,在spring核心配置文件中引入单独配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    <!-- 配置c3p0连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 注入属性值 -->
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql:///spring_day04"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    
    <!-- sessionFactory创建交给spring管理 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!-- 因为在hibernate核心配置文件中,没有数据库配置,数据库配置在spring里面配置,注入dataSource -->
        <property name="dataSource" ref="dataSource"></property>
        
        <!-- 指定使用hibernate核心配置文件 -->
        <!-- <property name="configLocations" value="classpath:hibernate.cfg.xml"></property> -->
        
        <!-- 配置hibernate基本信息 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            </props>
        </property>
        
        <!-- 配置映射文件引入 -->
        <property name="mappingResources">
            <list>
                <value>cn/itcast/entity/User.hbm.xml</value>
                <!-- <value>....</value> -->
            </list>
        </property>
        
    </bean>
    
    <!-- 第一步 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <!--注入sessionFactory-->
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    
    <!-- 第二步 开启事务注解 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    

    <!-- 引入其他spring配置文件 -->
    <import resource="classpath:user.xml"/>
    
</beans>

user.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    <!-- 配置action的对象 -->
    <bean id="userAction" class="cn.itcast.action.UserAction" scope="prototype">
        <!-- 注入service -->
        <property name="userService" ref="userService"></property>
    </bean>
    
    <!-- 创建service对象 -->
    <bean id="userService" class="cn.itcast.service.UserService">
        <!-- 注入dao 
            接口 = 实现类对象
        -->
        <property name="userDao" ref="userDaoImpl"></property>
    </bean>
    
    <!-- 创建实现类对象 -->
    <bean id="userDaoImpl" class="cn.itcast.dao.UserDaoImpl">
        <property name="hibernateTemplate" ref="hibernateTemplate"></property>
    </bean>
    
    <!-- 创建hibernateTemplate对象 -->
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
        <!-- 注入sessionFactory -->
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    
    
</beans>
原文地址:https://www.cnblogs.com/kpsmile/p/10151913.html