亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

通過注解的方式向DAO中注入Sessionfactory

系統 2263 0

大部分時候我們都是通過xml配置方式向DAO中注入sessionfactory來實例化bean,有時候要DAO的實例化是通過注解的方式來實現。

?

對dao注解的話,最大的障礙是如何同時通過注解注入sessionfactory。

?

dao繼承自HibernateDaoSupport? ,sessionfactory來自于HibernateDaoSupport?中,我們無法修改HibernateDaoSupprot中的sessionfactory屬性進行注解,我們也無法對final類型的setSessionfactory方法進行重寫,故而要想把sessionfatory注入就得另外想辦法了。

?

無論何種方法,本質上都是把sessionfactory賦給HibernateDaoSupprot中的sessionfactory,只有這樣我們才能任意的使用HibernateDaoSupport中的任何方法。

?

第一個方法:通過@Resouce--按名字注入(@Autowired--按類型注入)注入,并執行方法體內容

HibernateDaoSupprot中的方法類型為final

?

Java代碼?? 收藏代碼
  1. public ? final ? void ?setSessionFactory(SessionFactory?sessionFactory)?{??
  2. ???????? if ?( this .hibernateTemplate?==? null ?||?sessionFactory?!=? this .hibernateTemplate.getSessionFactory())?{??
  3. ???????????? this .hibernateTemplate?=?createHibernateTemplate(sessionFactory);??
  4. ????????}??
  5. ????}??
  6. ??
  7. public ? final ? void ?setHibernateTemplate(HibernateTemplate?hibernateTemplate)?{??
  8. ???????? this .hibernateTemplate?=?hibernateTemplate;??
  9. ????}??



解決方法:

Java代碼?? 收藏代碼
  1. @Transactional ??
  2. @Repository ( "baseLocationDao" )??
  3. public ? class ?BaseLocationDaoImpl? extends ?HibernateDaoSupport? implements ?LocationDao{??
  4. ???? private ?Logger?logger?=?LoggerFactory.getLogger(BaseLocationDaoImpl. class );??
  5. ??????
  6. ???? @Resource ??
  7. ???? public ? void ?setMySessionFactory(SessionFactory?sessionFactory){??
  8. ???????? super .setSessionFactory(sessionFactory);??
  9. ????}??
  10. }??

?

第二種方法:上面的@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,直接使用其方法。

通過注解的方式向DAO中注入Sessionfactory


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一区二区三区毛片免费 | 国产第一综合另类色区奇米 | 国产精品视频免费在线观看 | 高清一级做a爱过程免费视频 | 一本清高清dvd日本播放器 | 亚洲综合日韩精品欧美综合区 | 中文乱码字幕午夜无线观看 | 欧美大尺码毛片 | 久久综合久久久久 | 另类av | 久cao在线观看视频 久re这里只有精品最新地址 | 成人黄色免费网站 | 青青青精品免费视频 | 亚洲欧美久久精品1区2区 | 性影院 | 美女伊人 | 一级黄色影片 | 9久re在线观看视频精品 | 又粗又大的机巴好爽7 | 青青青青手机在线视频观看国产 | 国产片一级aaa毛片视频 | 欧美高清在线精品一区 | 亚洲精品日韩中文字幕久久久 | 日韩中文字幕在线视频 | 亚洲码在线 | 天天久久综合 | 色婷婷综合和线在线 | 国产aaaaaaa毛片 | 伊人色综合久久天天伊 | 国产精片 | 狼狼色丁香久久女婷婷综合 | 92福利网 | 久久免费成人 | 免费观看日本a毛片 | 日韩免费一级毛片欧美一级日韩片 | 国产欧美一区二区三区在线看 | 华人欧美国产在线精品 | 亚洲乱码视频 | 91视频青青草 | 亚洲综合狠狠99婷婷 | 日韩欧美综合在线二区三区 |