我可以在Spring中注入一个接口子类型吗?

时间:2009-09-05 07:43:46

标签: java spring

现在似乎没有用。我得到了

  

显示java.lang.NullPointerException

我有一个实现接口的类

public class LearnerDao implements BaseDao {
   private BaseDao dao;
   public void setDao(BaseDao dao) {
      this.dao=dao;
   }
   .
   .
   .
}

这是我的布线

<bean id="pm" factory-bean="pmf" factory-method="getPersistenceManager"
      scope="prototype"></bean>

<bean id="learnerDao" class="com.hardwire.dao.impl.LearnerDao">
  <property name="pm" ref="pm"></property>
</bean>

<bean id="twitterUserDao" class="com.hardwire.dao.impl.TwitterUserDao">
  <property name="pm" ref="pm"></property>
</bean>

<bean id="learnerService" class="com.hardwire.service.LearnerService">
      <property name="dao" ref="learnerDao"></property
</bean>

这是我的learnerService

public class LearnerService {
private static final Logger log = 
         Logger.getLogger(LearnerService.class.getName());
private BaseDao dao;
.
    .
    .
public void insert(Learner learner){
    if (dao==null){
        log.info("dao is null");
    }
    else {
        log.info("dao is not null");
    }
    dao.insert(learner);
}
public void setDao(BaseDao dao) {
    this.dao = dao;
}

只有学习者才能实现BaseDao。另一方面,bean twitterUserDao没有。我想要注意的是twitterUserDao注入的还不错,但是学习者不是。 日志显示learnerDao为null。所以我想知道这是否与mathnerDao实现接口有关。

2 个答案:

答案 0 :(得分:0)

不,你绝对可以做到。请注意,您尝试在pm中设置learnerDao属性,但未显示任何设置dao属性的内容。这可能是问题吗?

答案 1 :(得分:0)

我终于找到了一切都出错的地方。我有一个代码的错误在一个控制器中被杀死,该控制器将learnerService作为其依赖:

learnerService = new LearnerService();

立刻笑掉我的屁股! :))