Могу ли я внедрить подтип интерфейса в Spring?

#java #spring

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

Это только learnerDao, который реализует BaseDao. С другой стороны, bean twitterUserDao этого не делает. Я хотел бы отметить, что twitterUserDao был введен нормально, а learnerDao — нет.
Журналы показывают, что learnerDao имеет значение null. Поэтому мне было интересно, имеет ли это какое-либо отношение к learnerDao, реализующему inteface.

Ответ №1:

Нет, вы определенно можете это сделать. Обратите внимание, что вы пытаетесь установить pm свойство в learnerDao , но вы ничего не показали, устанавливая dao свойство. Может ли это быть проблемой?

Ответ №2:

Я, наконец, нашел, где все идет не так. Мне пришлось устранить эту ошибку в коде в контроллере, который имеет learnerService в качестве зависимости:

 learnerService = new LearnerService();
  

Прямо сейчас я смеюсь до упаду! :))