基于前面两个structs和Hibernate整合的基础上,整合Spring,均参考与大牛博客。
1. 添加相关的jar包
1.1 将spring-framework-4.0.0.RELEASE->libs下的除了以sources和javadoc的jar包外的所有jar包全部拷贝到lib目录下,共21个。
1.2 将hibernate-release-4.3.10.Final->lib->optional->c3p0下的c3p0-9.2.1.jar以及mchange-commons-java-0.2.3.4.jar拷贝到lib目录下。
1.3 下载struts2-spring-plugin-2.3.4.1.jar以及commons-logging-1.0.4.jar
2.添加Spring的配置信息,applicationContext.xml位于WEB_INF目录下。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 定义数据源的信息 class="com.mchange.v2.c3p0.ComboPooledDataSource"-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:mysql://127.0.0.1:3306/test</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
<property name="maxPoolSize">
<value>80</value>
</property>
<property name="minPoolSize">
<value>1</value>
</property>
<property name="initialPoolSize">
<value>1</value>
</property>
<property name="maxIdleTime">
<value>20</value>
</property>
</bean>
<!--定义Hibernate的SessionFactory (相当于一个JDBC连接)-->
<!-- SessionFactory使用的数据源为上面的数据源 -->
<!-- 指定了Hibernate的映射文件和配置信息 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>com/zwl/ssh/beans/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="baseDao" class="com.zwl.ssh.daoImpl.UserDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!--用户注册业务逻辑类 -->
<bean id="userManager" class="com.zwl.ssh.serviceImpl.UserManagerImpl">
<property name="dao">
<ref bean="baseDao" />
</property>
</bean>
<!-- 用户注册的Action -->
<bean id="regAction" class="com.zwl.ssh.action.RegisterAction">
<property name="userManager">
<ref bean="userManager" />
</property>
</bean>
<!-- more bean definitions go here -->
</beans>
3.删除之前的Hibernate配置文件,Hibernate.cfg.xml和工厂类HibernateSessionFactory类,由于现在它们的工作将由Spring完成。
4.修改相应的类
接口类BaseDao.java,不在需要获取或设置session的函数定义。
public interface BaseDao {
public void saveObject(Object obj) throws HibernateException;
//public Session getSession();
//public void setSession(Session session);
}
相应的UserDao.java
public class UserDao implements BaseDao {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
private Session getCurrentSession() {
return sessionFactory.openSession();
// return sessionFactory.getCurrentSession();
}
@Override
public void saveObject(Object obj) throws HibernateException {
this.getCurrentSession().save(obj);
}
}
public class UserDao implements BaseDao {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
private Session getCurrentSession() {
return sessionFactory.openSession();
// return sessionFactory.getCurrentSession();
}
@Override
public void saveObject(Object obj) throws HibernateException {
this.getCurrentSession().save(obj);
}
}
业务逻辑实现类
public class UserManagerImpl implements UserManager {
private BaseDao dao;
public void setDao(BaseDao dao) {
this.dao = dao;
}
@Override
public void regUser(UserForm userForm) throws HibernateException {
User user = new User();
BeanUtils.copyProperties(userForm, user);
dao.saveObject(user);
}
}
用户注册Action类
public class RegisterAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private UserForm user;
private UserManager userManager;
public UserForm getUser() {
return user;
}
public void setUser(UserForm user) {
this.user = user;
}
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
public String execute() {
try {
userManager.regUser(user);
return SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
}
此时必须在web.xml中增加Listener
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
5.运行结果同上文。