我对注射豆的整个想法都很陌生,所以说慢一点。 :)
我有一个注入bean的类,但是当访问该属性时,该属性为null并且我得到一个空指针异常。
来自/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的定义:
INFO [2010-01-15 01:10:05,838] [主要] [XmlBeanDefinitionReader] [XmlBeanDefinitionReader.java:323] - 从URL加载XML bean定义 [文件:战争模块/ SRC /主/ web应用/ WEB-INF /弹簧配置/弹簧dao.xml] INFO [2010-01-15 01:10:05,858] [主要] [XmlBeanDefinitionReader] [XmlBeanDefinitionReader.java:323] - 从URL加载XML bean定义 [文件:战争模块/ SRC /主/ web应用/ WEB-INF /弹簧配置/弹簧bean.xml] INFO [2010-01-15 01:10:06,597] [主要] [DefaultListableBeanFactory] [DefaultListableBeanFactory.java:414] - 在org.springframework.beans.factory.support.DefaultListableBeanFactory@3c01d5a0中预先实例化单例: 定义bean [(snip)jdbcLinkDao, linkCheck(剪断)businessLoggingAspect,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#1]; 工厂层级的根
有没有人对如何解决bean注入问题有任何建议?
答案 0 :(得分:8)
我正在扩大我对OP问题的评论,因为它似乎有帮助......
我们仍然缺少一些信息,例如使用linkCheck bean的代码如何获取它?它也注射了吗?你是从Spring上下文中检索它的吗?我假设你没有做new LinkCheck()
,但是因为你是Spring的新手,这是一个明智的开始问题。
如果bean控制bean的创建,Spring只能注入bean:如果你执行new MyClass()
,那么Spring容器不知道对象并且不能进行注入。
答案 1 :(得分:1)
有一个潜在的问题是'jdbcLinkDao'的类型是'jdbcLinkDao',但是setter的参数类型是LinkDAO。 (如果'jdbcLinkDao'是'LinkDAO'的子类型,可能没问题......但要修改类别名称!)
如果那不是问题我建议你:
将日志级别设置为DEBUG,
如果没有显示任何内容,请向LinkCheck.setLinkDAO()
添加跟踪打印,以查看正在设置的值...以及何时设置。