簡體   English   中英

Spring Boot自動連線的空指針異常

[英]spring boot autowired null pointer exception

我正在使用Spring Boot和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類:-

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

當您自己創建類的實例時,如以下行所示

Main main = new Main();

Spring不了解實例,自動裝配不起作用。 在您的情況下,只需排隊

this.getFiles();

在運行方法中就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM