Spring HibernateTemplate - 自动装配

时间:2012-01-03 22:08:25

标签: hibernate spring

而不是自动装配SessionFactory并创建HibernateTemplate,是否可以自动装配HibernateTemplate?

public class DaoImpl implements Dao {

private HibernateTemplate hibernateTemplate;

@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
    hibernateTemplate = new HibernateTemplate(sessionFactory);
}
...
}

而不是上面的代码,下面给出的就好了吗?

public class DaoImpl implements Dao {

@Autowired private HibernateTemplate hibernateTemplate;

...
}

并在XML中配置HibernateTemplate。

这种方法的优点和缺点是什么?

3 个答案:

答案 0 :(得分:2)

你可以这样做但是如果你正在使用Hibernate 3.0.1,你可以避免使用hibernate模板。以下内容来自Hibernate模板Api here

NOTE: As of Hibernate 3.0.1, transactional Hibernate access code can also be coded in 
plain Hibernate style. Hence, for newly started projects, consider adopting the standard
Hibernate3 style of coding data access objects instead, based on 
SessionFactory.getCurrentSession(). 

同样根据jboss支持引用here

If you plan to use the Spring Hibernate template, then don't.
The Spring template were useful with Hibernate 2.x because of some mistakes we made   
the main one beeing checked exceptions. This is no longer the case for Hibernate 3.x. 
If you remove this exception wrapping necessity, Spring template are lust an overhead 
on top of the Hibernate API (hiding you the richness of the Hibernate API is some 
cases).

Hibernate 3的一个主要变化是从已检查到未检查的异常。阅读文章here以获取有关此内容的详细信息以及另外一篇here

答案 1 :(得分:0)

当然,那没关系。它没有比第一种方法更好或更差,它只是不同。

选择您认为可以提高代码可读性的那个,这是唯一真正的区别,而且是主观的。

答案 2 :(得分:0)

是的,这是可能的,并且毫不奇怪,如果您的DAO从HibernateDaoSupport延伸,Spring已经为此提供了一个简单的机制。然后,您可以使用getHibernateTemplate()访问该模板。我能想到的唯一缺点是你的DAO与Spring特定类相结合,但与经过良好测试的库耦合是可以的。此外,您已经直接引用了HibernateTemplate