spring 启动自动装配空指针异常

spring boot autowired null pointer exception

我正在使用 spring 引导和 java 配置,但是 @autowired 似乎不起作用。 我得到了一个 NPE,我已经检查了 SO 中的其他问题,但我看不出这种行为的原因。以下是我的代码:-

    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;
    }

BuilderFactory class:-

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);
    }
}

当您自己创建 class 的实例时,如以下行

Main main = new Main();

Spring 不知道该实例并且自动装配不起作用。 在你的情况下,只有这条线

this.getFiles();

在运行方法中应该足够了。