Spring与Hibernate、Struts调整方法笔记

Spring与Hibernate、Struts整合方法笔记

 

Spring 管理HibernateSessionFactory

 

  • Bean.xml for injecting HibernateConnectionFactory and HibernateTemplate

<bean id="hibernateTempalte" class="org.springframework.orm.hibernate3.HibernateTemplate">

<property name="senssionFactory ' ref="sessionFactory''></property>

</bean>

  • in XXXDao.java

@Component("userDao")

Public class UserDaoImpl implements UserDao{

Private HibernateTemplate;

 

@Resource

Public void setHibernateTemplate(HIbernateTemplate hibernateTemplate){

This.hibernateTemplate = hibernateTemplate;

}

 

// use hibernateTemplate in a method

hibernateTemplate.save(user);

hibernateTemplate.find(String HQL);

hibernateTemplate.findByCriteria(String sql);

HibernateTemplate.getSessionFactory.getCurrentSession();

}

 

  • In UserManagerImpl.java

 

@Resource

Public void setUserDao(UserDao userDao){

This.userDao = userDao;

}

  • In UserAction.java (Struts)

Private UserManager um;

Public UserAction(){

ApplacationContext ctx = new ClassPathXmlApplicationContext("beans.xml");

um = (UserManager)Ctx.getBean("UserManager");

}

  • 不再需要hibernate.cfg.cml, 数据库配置在beans.xml

 

Spring与Struts整合,由Spring负责管理所有Action的初始化

 

  • 为什么UserAction是由Struts初始化;就不能由Spring负责给UserAction提供UserManager?难道struts不支持@Resource这个annotation?所以只能由Spring代替Struts来管理UserAction,这样就可以随意注入UserManger实例到UserAction中?这也是SpringStruts的结合点。
  • Web.xml

tomacat启动时初始化Spring中的bean对象,需要在web.xml中添加下面监听器

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

<!-- Default: find WEB-INF/applicationContext.xml-->

</listener>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/applicationContext-*.xml, classpath*:applicationContext-*.xml</param-value>

<!-- customized config

<param-value>classpath:beans.xml</param-value>

-->

</context-param>

  • Add spring  for struts plug-in jar file.  Struts-spring-plugin-2.16.jar
  • UserAction 类上面添加注解Component("user")@scope("protptype") (scopeprototype表示多例,每个session生成一个Action实例) 则此Action会由Spring负责生成。注意:Component("user")中的"user"要与struts.xml中的Action name相同.例如 struts.xml中有:

<action name="user" class="com.bjsxt.registration.action.UserAction">

<result name="success">/registerSuccess.jsp</result>

<result name="fail">/registerFail.jsp</result>

</action>

 

  • Struts的读配置文件顺序
    • Struts-default.xml
    • Struts-plugin.xml
    • Struts.xml
    • Struts.properties
    • Web.xml
       

其中,@Component表示该类由Spring管理并且负责生成实例;@Resource 表示由Spring负责提供实例,不用手动new出来。