我将展示我一起使用这些框架的方式。我避免了 HibernateTemplate 的需要,我认为这个类太有限了,我更喜欢直接使用 Session。
一旦你的项目中有 Spring,它应该在你的 Daos 中注入 Hibernate SessionFactory,这样你就可以处理 Session。首先,您需要在 applicationContext.xml 中配置 SessionFactory:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
现在您可以使用@Autowired 注解注入 SessionFactory:
@Repository
public class HibernateProductDao implements ProductDao {
private final SessionFactory factory;
@Autowired
public HibernateProductDao(final SessionFactory factory) {
this.factory = factory;
}
public List<Product> findAll() {
return factory.getCurrentSession().createCriteria(Product.class).list();
}
public void add(final Product product) {
factory.getCurrentSession().save(product);
}
}
这里有一些重要的事情,你应该使用 getCurrentSession() 方法,因为这样你可以让 Spring 控制 Session 生命周期。如果您使用 getSession() 代替,它将成为您的责任,例如,关闭会话。
现在,让我们配置 Struts 2。在您的 web.xml 中:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
您还需要文件 struts.xml,说明 Spring 将制造对象:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />
</struts>
最后,您可以在您的操作中注入道:
public class ProductAction {
private ProductDao dao;
@Autowired
public ProductAction(ProductDao dao) {
this.dao = dao;
}
}
当然,由于您使用的是 Spring 注解,因此您需要使用component-scan 扫描包。
这是我发现集成此框架的最佳方式,希望对您有所帮助。