如何为用户定义的类列表定义spring bean?

时间:2014-05-14 23:34:26

标签: spring java-ee spring-bean

我是春天的新人。使用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");"

我做错了什么?

1 个答案:

答案 0 :(得分:0)

OtherClass不是托管bean。您可能正在代码中的某处执行new OtherClass()

托管bean是由Spring管理的实例,因为它是

  • 通过组件扫描(OtherClass注释为@Component和应用程序上下文中的组件扫描指令)发现
  • 在应用程序上下文中明确创建(即与您的FileDetails bean一起)

当您运行new OtherClass()时,它是您创建的常规实例,Spring不知道您创建了它,并且它无法处理注释,例如@Autowired

所以你最终会得到一个实例,就像Spring根本就不存在一样,正如你所看到的那样,你的列表是null

集合上的

@Autowired找到集合类型的所有托管 bean,并将它们收集到注入的集合中。如果未找到任何项目,则抛出异常,除非您将注释的required标志设置为false

最后请注意,FileDetails的示例没有空构造函数,并且您的bean定义也没有提供任何参数。这不应该有用,我猜您删除了描述中的部分代码。