java - 我可以在 Spring 中注入(inject)接口(interface)子类型吗?

标签 java spring

现在似乎不起作用。我得到一个

java.lang.NullPointerException

我有一个实现接口(interface)的类

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;
}

只有learnerDao实现了BaseDao。另一方面,bean twitterUserDao 则不然。我想指出的是 twitterUserDao 被注入(inject)了,但 learnerDao 却没有。 日志显示 learnerDao 为空。所以我想知道这是否与 learnerDao 实现接口(interface)有关。

最佳答案

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

关于java - 我可以在 Spring 中注入(inject)接口(interface)子类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382740/

相关文章:

html - spring thymeleaf - 从 html 表中删除对象并将 id 传递给 Controller

java - SpringIntegration 在不处理的情况下从队列中删除消息

java - Apache Spark 使用 Java 加入示例

java - 构建脚本 - 如何判断 apache tomcat 是否正确部署了我的 webapp?

java - BugSense 崩溃了

java - 将 Spring 与 GWT 集成

java - HttpMediaTypeNotSupportedException

java - 无法使用 Maven 导入 o​​rg.springframework.jdbc.core

java - 在 Wildfly 10 上使用 ActiveMQ Artemis 的 Websockets/STOMP 无法正常工作

java - 为什么 Eclipse 崩溃 Xmx, XX :MaxPermSize above certain values?