首先偶是初学者,想问问,spring可以不可以对接口注入?可以不可以对抽象类的成员注入?如果可以的话偶遇到了一个注入为null的问题,请帮忙看看,不胜感激!
接口代码package entity.model.dao.base;import java.io.Serializable;
import java.util.List;public interface EntityDao <T> {
@SuppressWarnings("unchecked")
public List getAll() throws Exception;
public T get(Serializable id) throws Exception;
public void save(Object o) throws Exception;
public void removeById(Serializable id) throws Exception;
public void remove(Object o);
}//end interface EntityDao 抽象类代码,这个类主要用来被继承的package entity.model.dao.base;public abstract class EntityDaoBase <T>  {
protected HibernateDao hibernateDao;
protected IbatisDao ibatisDao;
public String message; public HibernateDao getHibernateDao() {return this.hibernateDao;}//end method getHibernateDao 
public void setHibernateDao(HibernateDao hibernateDao) {this.hibernateDao = hibernateDao;}//end method setHibernateDao  public IbatisDao getIbatisDao() {return this.ibatisDao;}//end method getIbatisDao 
public void setIbatisDao(IbatisDao ibatisDao) {this.ibatisDao = ibatisDao;}//end method setIbatisDao  public String getMessage() {return this.message;}//end method getMessage 
public void setMessage(String message) {this.message = message;}//end method setMessage }//end class EntityDaoBase 基本实现类代码package entity.model.dao.base;import java.io.Serializable;
import java.util.List;import org.springframework.orm.ObjectRetrievalFailureException;@SuppressWarnings("unchecked")
public class EntityDaoBaseImpl<T> extends EntityDaoBase<T> implements EntityDao<T> { public void setHibernateDao(HibernateDao hibernateDao) {
this.hibernateDao = hibernateDao;
System.out.println("派生类注入HibernateDao");
}//end method setHibernateDao  public void setIbatisDao(IbatisDao ibatisDao) {
this.ibatisDao = ibatisDao;
System.out.println("派生类注入IbatisDao");
}//end method setIbatisDao  /**
 * 根据ID移除对象.
 * @see HibernateGenericDao # removeById(Class, Serializable)
 */
public void removeById(Serializable id) {this.removeById(getEntityClass(), id);}//end method removeById  /** 删除对象 */
public void remove(Object o) {this.hibernateDao.getHibernateTemplate().delete(o);}//end method remove  /** 根据ID删除对象 */
public void removeById(Class<T> entityClass, Serializable id) {this.remove(this.get(entityClass, id));}//end method removeById  public void flush() {this.hibernateDao.getHibernateTemplate().flush();}//end method flush  public void clear() {this.hibernateDao.getHibernateTemplate().clear();}//end method clear  public T get(Serializable id) throws Exception {return get(entityClass, id);}//end method get  /** 根据ID获取对象 */
@SuppressWarnings("hiding")
public T get(Class<T> entityClass, Serializable id) {
T o = (T)this.ibatisDao.getSqlMapClientTemplate().queryForObject(entityClass.getName() + POSTFIX_EDIT, id);
if (o == null) {throw new ObjectRetrievalFailureException(entityClass, id);}//end if 
return o;
}//end method get  public List<T> getAll() {return this.getAll(entityClass);}//end method getAll 

/** 获取全部对象 */
@SuppressWarnings("hiding")
public <T> List<T> getAll(Class<T> entityClass) {
return this.ibatisDao.getSqlMapClientTemplate().queryForList(entityClass.getName() + POSTFIX_SELECT, null);
}//end method getAll  public void save(Object o) throws Exception {
if (o == null) {throw new Exception("model can't be null when save!");}//end if 
try {this.hibernateDao.getHibernateTemplate().saveOrUpdate(o);}//end try 
catch (Exception e) {e.printStackTrace();}//end catch Exception 
}//end method save }//end class 
调用代码package entity.model.consumer.business;import entity.model.consumer.Consumer;
import entity.model.dao.base.EntityDao;
public class ConsumerProcessor {
private EntityDao<Consumer> consumerDao; public ConsumerProcessor() {}//end Construct method  public void setConsumerDao(EntityDao<Consumer> consumerDao) {
this.consumerDao = consumerDao;
}//end method setConsumerDao  public void registerNewOne(Consumer consumer) {
try {this.consumerDao.save(consumer);}//end try 
catch (Exception e) {e.printStackTrace();}//end catch Exception 
}//end method registerNewOne }//end class LandProcessor spring配置<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName" default-lazy-init="true">
<bean id="ibatisDao" class="entity.model.dao.base.IbatisDao"/>
<bean id="hibernateDao" class="entity.model.dao.base.HibernateDao"/>
<bean id="daoBase" class="entity.model.dao.base" abstract="true">
<property name="ibatisDao">
<ref local="ibatisDao"/>
</property>
<property name="hibernateDao">
<ref local="hibernateDao"/>
</property>
</bean>
<bean id="consumerDao" class="entity.model.dao.base.EntityDaoBaseImpl" parent="daoBase"/>
</beans>我的想法是这样的,最好能在抽象类中注入两个实例ibatisDao hibernateDao然后基础实现()中直接调用,如果不用基础实现类将来可以继承抽象类使用ibatisDao hibernateDao两个实例来重新应用实现.
如果抽象类不能注入,则考虑在派生类中注入.
现在的问题是,运行后ibatisDao hibernateDao两个实例始终为null报空指针异常.
偶是初学者,实在是不知道哪里出了问题,上网搜了半天也没搞定,只好麻烦大家乐,哪位知道请指点一二,在下不胜感激,谢谢~!谢谢~!