Java spring引导自动连线空指针异常
我使用的是spring boot和java配置,但是autowired似乎不起作用。 我得到了NPE,我已经检查了其他问题,所以我看不出这种行为的原因。以下是我的代码:-Java spring引导自动连线空指针异常,java,spring-boot,nullpointerexception,autowired,Java,Spring Boot,Nullpointerexception,Autowired,我使用的是spring boot和java配置,但是autowired似乎不起作用。 我得到了NPE,我已经检查了其他问题,所以我看不出这种行为的原因。以下是我的代码:- package com.bhargo; //skipping imports @SpringBootApplication public class Main implements CommandLineRunner { @Autowired private B
package com.bhargo;
//skipping imports
@SpringBootApplication
public class Main implements CommandLineRunner {
@Autowired
private BuilderFactory builderFactory;
@Autowired
private LinksBuilder linksBuilder;
private final static File fileDir = new File("D:\\ml-20m");
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
@Override
public void run(String... args) throws Exception {
Main main = new Main();
main.getFiles();
}
private void getFiles () {
Builder[] builder = new Builder[1];
Arrays.stream(fileDir.listFiles()).filter(n -> !n.getName().contains("txt") /*&& n.getName().contains("links")*/)
.forEach(f ->{
//builder factory is NULL
builder[0] = builderFactory.getBuilderFor(f.getName());
....
....
@Bean
public BuilderFactory builderFactory() {
BuilderFactory builderFactory = new BuilderFactory();
Map<String, Builder> map = new HashMap<>();
map.put("genome-scores.csv",genomeScoreBuilder());
map.put("genome-Tags.csv",genomeTagBuilder());
map.put("links.csv", linksBuilder());
map.put("movies.csv", movieBuilder());
map.put("ratings", ratingBuilder());
map.put("tags.csv", tagBuilder());
builderFactory.setBuilderMap(map);
return builderFactory;
}
package com.bhargo;
//跳过导入
@SpringBoot应用程序
公共类Main实现CommandLineRunner{
@自动连线
私人建筑厂建筑厂;
@自动连线
私人LinksBuilder LinksBuilder;
私有最终静态文件fileDir=新文件(“D:\\ml-20m”);
公共静态void main(字符串[]args){
SpringApplication.run(Main.class,args);
}
@凌驾
公共无效运行(字符串…参数)引发异常{
Main Main=新Main();
main.getFiles();
}
私有void getFiles(){
建筑商[]建筑商=新建筑商[1];
Arrays.stream(fileDir.listFiles()).filter(n->!n.getName().contains(“txt”)/*&&n.getName().contains(“links”)*/)
.forEach(f->{
//生成器工厂为空
builder[0]=builderFactory.getbuilder(f.getName());
....
....
@豆子
公共BuilderFactory BuilderFactory(){
BuilderFactory BuilderFactory=新的BuilderFactory();
Map Map=newhashmap();
map.put(“genomescores.csv”,genomeScoreBuilder());
map.put(“genome Tags.csv”,genomeTagBuilder());
map.put(“links.csv”,linksBuilder());
map.put(“movies.csv”,movieBuilder());
map.put(“评级”,ratingBuilder());
map.put(“tags.csv”,tagBuilder());
builderFactory.setBuilderMap(地图);
返回建设者工厂;
}
BuilderFactory类:-
package com.bhargo.model.builder;
import com.bhargo.Builder;
import java.util.Map;
public class BuilderFactory {
private Map<String, Builder> builderMap;
public BuilderFactory() {
}
public Map<String, Builder> getBuilderMap() {
return builderMap;
}
public void setBuilderMap(Map<String, Builder> builderMap) {
this.builderMap = builderMap;
}
public Builder getBuilderFor(String fileName) {
return builderMap.get(fileName);
}
}
package com.bhargo.model.builder;
导入com.bhargo.Builder;
导入java.util.Map;
公共类构建器工厂{
私有地图生成器;
公共建筑工厂(){
}
公共映射getBuilderMap(){
返回构建器映射;
}
公共无效setBuilderMap(地图构建器Map){
this.builderMap=builderMap;
}
公共生成器getBuilderFor(字符串文件名){
返回builderMap.get(文件名);
}
}
当您自己创建一个类的实例时,如下图所示
Main main = new Main();
Spring不知道该实例,自动布线也不起作用。
在你的情况下,只要排队就行了
this.getFiles();
在run方法中应该足够了。当您自己创建一个类的实例时,如以下行所示
Main main = new Main();
Spring不知道该实例,自动布线也不起作用。
在你的情况下,只要排队就行了
this.getFiles();
在run方法中应该足够了。您可以移动
@Bean public BuilderFactory BuilderFactory()吗{
方法在@Autowired private BuilderFactory BuilderFactory之前;
主类中的成员变量并重试?不起作用!!!!!okies,您是否已在@Bean public BuilderFactory BuilderFactory()中放入sysout语句{
方法并检查您是否能够打印映射中的元素?这应该可以告诉您bean是否已实例化。是的,我之前进行了此调试,该方法在启动期间被调用,映射也被填充为什么您要创建自己的Main实例(Main=new Main();
)?如果一个类不是由Spring管理的,自动连接将不起作用。您可以移动@Bean public BuilderFactory BuilderFactory()吗{
方法在@Autowired private BuilderFactory BuilderFactory之前;
主类中的成员变量并重试?不起作用!!!!!okies,您是否已在@Bean public BuilderFactory BuilderFactory()中放入sysout语句{
方法并检查您是否能够打印映射中的元素?这应该可以告诉您bean是否已实例化。是的,我之前进行了此调试,该方法在启动期间被调用,映射也被填充为什么您要创建自己的Main实例(Main=new Main();
)?如果一个类不是由Spring管理的,自动连线将不起作用。