2009-09-05 58 views
1

它现在似乎没有工作。我得到一个我可以在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注入刚好,但学习者Dao不是。 日志显示learnerDao为空。所以我想知道这与学习者实施界面有什么关系。

回答

0

我终于发现一切都出错了。我有这个代码的bug在具有learnerService其相关性的控制器杀:

learnerService = new LearnerService(); 

笑我的屁股现在! :))

0

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

+0

哎呀很抱歉,我已经在我的帖子中阐述了...... – Jeune 2009-09-05 08:21:39

相关问题