接上篇博文
在整合ssh写了一个小例子的时候出现了这个问题:
代码如下
package com.crm.biz;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.crm.info.Cuser;
@Transactional
@Service(“cuserBiz”)
public class CuserBiz extends HibernateDaoSupport{
public void add(Cuser cuser){
System.out.println(cuser.getCrm_name());
System.out.println("--------------");
try{
this.getHibernateTemplate().save(cuser);
}catch(Exception e){
e.printStackTrace();
}
}
}
我在运行的时候this.getHibernateTemplate().save(cuser);这一块报指针异常的情况;后来经过长时间的调试,终于找到了问题所在;
一开始我在Action中是这样创建的CuserBiz类,代码如下
package com.crm.action;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.crm.biz.CuserBiz;
import com.crm.info.Cuser;
import com.opensymphony.xwork2.ActionSupport;
@Scope(“prototype”)
@Controller(“cuserAction”)
public class CuserAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private Cuser cuser;
public Cuser getCuser() {
return cuser;
}
public void setCuser(Cuser cuser) {
this.cuser = cuser;
}
public String add(){
System.out.println(userBiz);
System.out.println(cuser.getCrm_name());
new CuserBiz().add(cuser);
return "cc";
}
}
直接new的CuserBIz对象,这样一来创建对象就不经过spring管理,所以创建的一个新的对象,我们都知道spring配置文件中将sessionFactory注入给HibernateDaoSupport,然后就可以通过getHibernateTemplate来获得HibernateTemplate;
但是上面调用的add方法的时候直接是new的CuserBiz对象故没有依赖注入,所以自然而然的this.getHibernateTemplate().save(cuser);会报空指针错误;
只要把new CuserBiz改成CuserBiz userBiz写上set方法就可以了;如下
package com.crm.action;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.crm.biz.CuserBiz;
import com.crm.info.Cuser;
import com.opensymphony.xwork2.ActionSupport;
@Scope(“prototype”)
@Controller(“cuserAction”)
public class CuserAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private Cuser cuser;
private CuserBiz userBiz;
public void setCuserBiz(CuserBiz cuserBiz) {
this.userBiz = cuserBiz;
}
public Cuser getCuser() {
return cuser;
}
public void setCuser(Cuser cuser) {
this.cuser = cuser;
}
public String add(){
System.out.println(userBiz);
System.out.println(cuser.getCrm_name());
userBiz.add(cuser);
return "cc";
}
}
此也是我看到另一片博文才想到的,链接如下:
http://blog.youkuaiyun.com/gladiator_wyj/article/details/54915403
写此篇博文希望对大家有所帮助,也给自己的一个记录吧。