解決this.getHibernateTemplate()==null的問題


剛剛在整合SSH時碰到了這樣一個問題:

當我用junit測試時不會報任何異常,數據也都能得到
public class BuyerTest {
@BeforeClass
public static void begin() throws Exception{}
 
@Test
public void save(){
  Configuration config=new AnnotationConfiguration().configure();
  SessionFactory sf=config.buildSessionFactory();
  Session session=sf.openSession();
  Transaction tr=session.beginTransaction();
  try {
    tr.begin();
    Buyer b=(Buyer) session.get(Buyer.class,"zs");
    System.out.println(b.getUserpwd());
    tr.commit();
    } catch (HibernateException e) {
      e.printStackTrace();
      tr.rollback();
    }
  }
}
可是當我寫個main方法測試dao包時,卻出現空指針異常:

 


我的代碼是這樣的:
dao包:
public class BuyerDao extends HibernateDaoSupport {
  public Buyer save() {
    HibernateTemplate template=this.getHibernateTemplate();
    String hql="from Buyer u";
    List<Buyer> list=template.find(hql);
    if(null==list){
      return null;
    }
    if(list.size()!=0){
      System.out.println(list.get(0).getUserpwd());
      return list.get(0);
    }
    return null;
  }
}
-----------------------------------------------------------------
main方法:
public class main {
  public static void main(String[] args) {
    BuyerDao udao=new BuyerDao();
    udao.save();
   }
}
-----------------------------------------------------------------
搞了好長時間,在網上找了下答案,沒怎么看明白,但我發現有人說看看 this.getHibernateTemplate()是否為空,我調試了下,發現我的代碼中 this.getHibernateTemplate()確實為null!!!
ps:我的applicationContext.xml文件沒有錯誤。
 
這里我們需要想一下為什么要用spring?或者說使用spring要用到它的什么思想等等。
---使用spring是要用到它的依賴注入的,而直接new出來的是沒有依賴注入的,故對象沒有初始化。
也就是說
BuyerDao udao=new BuyerDao();
udao.save();
這里不存在依賴注入,也就自然而然地報空指針異常。
解決辦法:在main方法中,不要對 BuyerDao  進行初始化,而是通過配置文件applicationContext.xml來獲取。
ClassPathXmlApplicationContext resource  = new  ClassPathXmlApplicationContext("applicationContext.xml");; 
BuyerDao dao=(BuyerDao) resource.getBean("userDao");
dao.save();
 
注:userDao是配置文件 applicationContext.xml中bean的id值
<bean id="userDao" class="jnuit.test.BuyerDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
這樣,this.getHibernateTemplate()==null的問題就解決了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM