我是春天的新人。使用jdk 1.7。我已经定义了一个类:
public class FileDetails {
String filePath;
String fineName;
String timeStamp;
public FileDetails(String filePath, String fineName, String timeStamp) {
this.filePath = filePath;
this.fineName= fineName;
this.timeStamp = timeStamp;
}
}
尝试从同一个包中的另一个类创建此类的列表:
public class otherClass{
@Autowired
private List<FileDetails> fileInfo;
public void addToList(){
fileInfo.add(new FileDetails("something","something","something");
}
}
这是我的应用程序上下文:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config/>
<bean id="fileDetails" class="pacckageName.FileDetails" >
</bean>
</beans>
我收到错误:
null pointer exception on the line "fileInfo.add(new FileDetails("something","something","something");"
我做错了什么?
答案 0 :(得分:0)
OtherClass
不是托管bean。您可能正在代码中的某处执行new OtherClass()
。
托管bean是由Spring管理的实例,因为它是
OtherClass
注释为@Component
和应用程序上下文中的组件扫描指令)发现FileDetails
bean一起)当您运行new OtherClass()
时,它是您创建的常规实例,Spring不知道您创建了它,并且它无法处理注释,例如@Autowired
。
所以你最终会得到一个实例,就像Spring根本就不存在一样,正如你所看到的那样,你的列表是null
。
@Autowired
找到集合类型的所有托管 bean,并将它们收集到注入的集合中。如果未找到任何项目,则抛出异常,除非您将注释的required
标志设置为false
。
最后请注意,FileDetails
的示例没有空构造函数,并且您的bean定义也没有提供任何参数。这不应该有用,我猜您删除了描述中的部分代码。