Spring4+hiberante5+Struts2.5.13基于配置文件整合

来源:互联网 发布:linux普通用户提权 编辑:程序博客网 时间:2024/06/06 01:37
1.本次整合基于spring4.3.12+hibernate5+struts2.5.13
1)ssh框架
引入struts2, hibernate, spring 开发所需的jar包, 并且需要 struts-spring-plugins 的jar包, 用于整合struts2 和spring;
2)日志记录
3)数据库连接


maven pom.xml:
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    <!-- struts2 核心jar包 -->
<dependency>
   <groupId>org.apache.struts</groupId>
   <artifactId>struts2-core</artifactId>
   <version>2.5.13</version>
</dependency>
<!-- hibernate 核心jar包 -->
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>5.2.11.Final</version>
</dependency>
<!-- spring 核心jar包 IOC -->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>4.3.12.RELEASE</version>
</dependency>

<!-- 日志记录 -->
<!-- slf4j-api -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-api</artifactId>
   <version>1.7.25</version>
</dependency>
<!-- slf4j 具体包装库 -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-log4j12</artifactId>
   <version>1.7.25</version>
   <scope>test</scope>
</dependency>
<!-- log4j -->
<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
</dependency>
<!-- spring 日志 -->
<dependency>
   <groupId>commons-logging</groupId>
   <artifactId>commons-logging</artifactId>
   <version>1.2</version>
</dependency>

<!-- 扩展包 -->
<!-- spring AOP -->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-aop</artifactId>
   <version>4.3.12.RELEASE</version>
</dependency>
<!-- aop 关联jar包 -->
<dependency>
   <groupId>aopalliance</groupId>
   <artifactId>aopalliance</artifactId>
   <version>1.0</version>
</dependency>
<!-- aspectj 主要使用切面的注解 -->
<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjweaver</artifactId>
   <version>1.8.10</version>
</dependency>
<!-- spring jdbc模板 -->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-jdbc</artifactId>
   <version>4.3.12.RELEASE</version>
</dependency>
<!-- spring-orm 用于整合hibernate -->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-orm</artifactId>
   <version>4.3.12.RELEASE</version>
</dependency>
<!-- spring-web 用于整合web项目 -->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>4.3.12.RELEASE</version>
</dependency>



<!-- struts2 注解 -->
<dependency>
   <groupId>org.apache.struts</groupId>
   <artifactId>struts2-convention-plugin</artifactId>
   <version>2.5.13</version>
</dependency>
<!-- struts2 整合 spring 的jar包 -->
<dependency>
   <groupId>org.apache.struts</groupId>
   <artifactId>struts2-spring-plugin</artifactId>
   <version>2.5.13</version>
</dependency>

<!-- c3p0 连接池 -->
<dependency>
   <groupId>com.mchange</groupId>
   <artifactId>c3p0</artifactId>
   <version>0.9.5.2</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.6</version>
</dependency>

  </dependencies>


2.引入相应的配置文件
1)struts2 配置文件
在web.xml 文件中配置struts2 的主过滤器;
struts.xml(struts.properties)
2)spring 配置文件
web.xml 配置监听器
applicationContext.xml
3)hibernate 配置文件(本次整合方式不使用hibernate.cfg.xml,被整合到spring 配置文件中)
hibernate.cfg.xml;
映射文件
hibernate.hbm.xml;


3.创建包结构
* action
* service
* dao
* domain


4.struts2整合spring
(由于spring-web和spring-org没有5.0版本,且5.0版本spring-beans的文件及目录有所改变,所以将spring降级到4.3.12)


5.编写Action, Service和 DAO
1)Action的类要继承ActionSupport, 实现ModelDriven<T>
2)由于struts-spring-plugins开启了按名称自动注入bean, 所以不需要再创建beanFactory, 直接配置业务层的类及set/get方法就行了, 同时配置模型驱动使用的类, 实现getModel()方法
// 模型驱动使用的类
private T product = new T();

@Override
public T getModel() {
return product;
}


6.配置Action, Service和 DAO
1)在application.xml中配置业务层和DAO层的bean, 并且在业务层中注入DAO层的bean
2)Struts2和Spring整合的两种方式:
1.Action的类由Struts2自身去创建
Action的配置:struts.xml

<!-- 由struts2 自身创建Action -->
<package name="ssh" extends="struts-default" namespace="/">
<action name="product_*" class="cn.muke.ssh.action.ProductAction" method="{1}">

</action>
</package>

Service和DAO的配置:applicationContext.xml 
<!-- 配置业务层的bean -->
<bean id="productService" class="cn.muke.ssh.service.ProductService">
<property name="productDao" ref="productDao"/>
</bean>

<!-- 配置DAO 的bean -->
<bean id="productDao" class="cn.muke.ssh.dao.ProductDao">

</bean>


2.Action的类交给Spring框架创建, 推荐使用这种方式, 可以使用AOP 管理
Action的配置:struts.xml

<!-- 由struts2 自身创建Action class对应applicationContext.xml中bean的名称 -->
<package name="ssh" extends="struts-default" namespace="/">
<action name="product_*" class="productAction" method="{1}">

</action>
</package>

Action, Service和DAO的配置:applicationContext.xml

<!-- 配置Action的bean Action是多例,所以需要配置scope="prototype" -->
<bean id="productAction" class="cn.muke.ssh.action.ProductAction" scope="prototype">
<!-- 手动注入Service -->
<property name="productService" ref="productService"></property>
</bean>

<!-- 配置业务层的bean -->
<bean id="productService" class="cn.muke.ssh.service.ProductService">
<property name="productDao" ref="productDao"/>
</bean>

<!-- 配置DAO 的bean -->
<bean id="productDao" class="cn.muke.ssh.dao.ProductDao">

</bean>

7.spring整合bibernate
1)为持久化类生成对应的*.hbm.xml文件


2)配置jdbc.properties文件
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database-name
jdbc.username=account
jdbc.password=password


3)在applicationContext.xml中:
<!-- 引入外部文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>


<!-- 配置连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>




4)将hibernate.cfg.xml整合入applicationContext.xml中
<!-- 配置hibernate相关属性 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 注入连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置hibernate的属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 加载hibernate中的映射文件 -->
<property name="mappingResources">
<list>
<value>cn/muke/ssh/domain/Product.hbm.xml</value>
</list>
</property>
</bean>

8.编写DAO中的代码
1)DAO的类继承 HibernateDaoSupport类


2)在配置DAO的时候:
<!-- 配置DAO 的bean -->
<bean id="productDao" class="cn.muke.ssh.dao.ProductDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

3)在DAO中调用模板完成保存的操作:
this.getHibernateTemplate().save(product);

9.事务管理
1)在applicationContext.xml中:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
2)在业务层对应的类上添加事务注解:
@Transactional
public class ProductService {
...
}