【问题标题】:Spring Injected Bean property is nullSpring Injected Bean 属性为空
【发布时间】:2011-01-05 10:03:31
【问题描述】:

我对注入 bean 的整个想法很陌生,所以慢慢说。 :)

我有一个注入 bean 的类,但是当访问该属性时,该属性为空,我得到一个空指针异常。

来自/project-TRUNK/war-module/src/main/webapp/WEB-INF/spring-config/spring-bean.xml

 <bean id="linkCheck"
  class="com.dogwatch.util.LinkCheck">
  <property name="linkDao" ref="jdbcLinkDao" />
 </bean>

来自/project-TRUNK/war-module/src/main/webapp/WEB-INF/spring-config/spring-dao.xml

 <bean id="jdbcLinkDao" class="com.dogwatch.util.jdbcLinkDao">
  <property name="dataSource" ref="dataSource" />
  <property name="linkJdbcDataTypesSupport" ref="linkJdbcDataTypesSupport"/>
 </bean>

众所周知,DAO bean 很好,并且可以在其他几个类中工作。

package com.dogwatch.util;
public class LinkCheck {

 private LinkDAO linkDao;


 public LinkDAO getLinkDao() {
  return linkDao;
 }

 public void setLinkDao(LinkDAO linkDao) {
  this. linkDao = linkDao;
 }
}

我一直在将它与使用相同 DAO bean 的其他类进行比较,但我找不到任何差异。

我确实看到 bean 被定义在:

信息 [2010-01-15 01:10:05,838] [主要] [XmlBeanDefinitionReader] [XmlBeanDefinitionReader.java:323] - 从 URL 加载 XML bean 定义 [文件:war-module/src/main/webapp/WEB-INF/spring-config/spring-dao.xml] 信息 [2010-01-15 01:10:05,858] [主要] [XmlBeanDefinitionReader] [XmlBeanDefinitionReader.java:323] - 从 URL 加载 XML bean 定义 [文件:war-module/src/main/webapp/WEB-INF/spring-config/spring-bean.xml] 信息 [2010-01-15 01:10:06,597] [主要] [DefaultListableBeanFactory] [DefaultListableBeanFactory.java:414] - 在 org.springframework.beans.factory.support.DefaultListableBeanFactory@3c01d5a0 中预实例化单例: 定义 bean [(snip) jdbcLinkDao, linkCheck(snip)businessLoggingAspect,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#1]; 工厂层次结构的根

有人对如何解决 bean 注入问题有任何建议吗?

【问题讨论】:

  • 修复了导致前两个答案的错字。
  • 我们仍然缺少一些信息,比如使用linkCheck bean的代码是如何得到它的?是不是也注入了?您是否从 Spring 上下文中检索它?我假设您没有执行 new LinkCheck(),但由于您是 Spring 新手,因此这是一个明智的开始问题。
  • @Wade:也修复你的spring-dao.xml。谢谢。是的,回答史蒂文迪克。
  • @StevenDick,doh...告诉你我是新人...我确实还有一个新人。我将其更改为使用 getBean() 并且它现在可以正常工作 - 谢谢。如果您想将您的评论转换为答案,我会接受。
  • 对我来说,我遇到了类似的问题,但问题是我的类路径中有一个 jar 的重复版本,所以它从“一个旧 jar”加载我的 xml 定义,这导致了混乱。奇数。

标签: java spring


【解决方案1】:

我正在扩展我对 OP 问题的评论,因为它似乎有帮助...

我们仍然缺少一些信息,例如使用 linkCheck bean 的代码是如何获取它的?是不是也注入了?您是否从 Spring 上下文中检索它?我假设您没有在做 new LinkCheck(),但由于您是 Spring 新手,所以这是一个明智的开始问题。

只有当 Spring 控制 bean 的创建时,它才能注入 bean:如果您执行 new MyClass(),则 Spring 容器不知道该对象,因此无法进行注入。

【讨论】:

    【解决方案2】:

    'jdbcLinkDao' 的类型是 'jdbcLinkDao' 但 setter 的参数类型是 LinkDAO 存在一个潜在问题。 (如果 'jdbcLinkDao' 是 'LinkDAO' 的子类型,这可能没问题……但请修复类名!)

    如果这不是问题,我建议你:

    • 将日志级别设置为DEBUG,

    • 如果没有显示任何内容,请将跟踪打印添加到 LinkCheck.setLinkDAO() 以查看正在设置的值...以及设置的时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多