搭建Spring(4)

基于前面两个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.运行结果同上文。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值