首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

经过注解的方式向DAO中注入Sessionfactory

2013-01-23 
通过注解的方式向DAO中注入Sessionfactorypublic final void setSessionFactory(SessionFactory sessionFa

通过注解的方式向DAO中注入Sessionfactory
public final void setSessionFactory(SessionFactory sessionFactory) {if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {this.hibernateTemplate = createHibernateTemplate(sessionFactory);}}public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) {this.hibernateTemplate = hibernateTemplate;}

@Transactional@Repository("baseLocationDao")public class BaseLocationDaoImpl extends HibernateDaoSupport implements LocationDao{private Logger logger = LoggerFactory.getLogger(BaseLocationDaoImpl.class);@Resource public void setMySessionFactory(SessionFactory sessionFactory){super.setSessionFactory(sessionFactory);}}

?

第二种方法:上面的@Resource注释其实有两种效果,一个是表示该方法在dao实例化时需要执行,另一个效果则是注入了一个sessionfactory给方法。两者合并最终把注入的sessionfactory赋给了超类中的sesseionfactory属性,得到类似注入的结果,可以直接使用超类中的各种方法无碍。那么这第二种方法则是第一种方法两个效果的分开进行。

@Repository

public class TestDAOImpl extends HibernateDaoSupport implements
??ITestDAO {
?
?/**
? * 注入mySessionFactory
? */
?@Autowired@Qualifier("mySessionFactory") /*****注入*****/
?protected SessionFactory mySessionFactory;
?@PostConstruct /*****bean实例化时执行该方法*******/
?protected void injectSessionFactory(){
??super.setSessionFactory(mySessionFactory);
?}

}

该方法分开两步,一步注入,一步赋值。

?

第三种方法:继承HibernateDaoSupport类,大部分都是为了使用其HibernateTemplate类中的各种方法,那么可以通过组合方式而非继承方式来达到这个目的。

public class TestDaoImp implements ITestDao{

HibernateTemplate hibernateTemplate;

@Resource?

public void setMysessionFactory(SessionFactory sessionFactory){

?this.hibernateTemplate = new HibernateTemplate(mySessionFactory);

}

public HibernateTemplate getHibernateTemplate(){
? return hibernateTemplate;

}
}

通过这种方法就可以引用getHibernateTemplate()方法来使用了。

同样的按照第二种方法也可以改为:

@Autowired@Qualifier("mySessionFactory") /*****注入*****/
protected SessionFactory mySessionFactory;
@PostConstruct /*****bean实例化时执行该方法*******/
protected void injectHibernateTemplate(){
? this.hibernateTemplate = new HibernateTemplate(mySessionFactory);
}

?

第四种方法;同上面一样,都是组合方式,不过注入的是HibernateDaoSupport的子类(hibernatedaosupport能否直接在xml配置为bean我不晓得了),且该子类先在xml中配置为bean。

可以通过先在xml中配置这样一个bean,然后通过组合引用HibernateDaoSupport,注入bean,直接使用其方法。

热点排行