2017-06-18 43 views
1

我使用的是spring引導和java配置,但是@autowired似乎不起作用。 我得到一個NPE,我檢查了其他問題,但我不能看到這種行爲的原因。以下是我的代碼: -春季開機自動佈線空指針異常

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

你可以移動'@Bean public BuilderFactory builderFactory(){'''在'@Autowired private BuilderFactory builderFactory;'Main類中的成員變量之前的方法並嘗試? – harshavmb

+0

不起作用!!!!! –

+0

好吧,你有沒有把sysout語句放在'@Bean public BuilderFactory builderFactory(){'方法中,並檢查你是否能夠在地圖中打印元素?這應該告訴bean是否被實例化。 – harshavmb

回答

4

當你在下面一行

Main main = new Main(); 

春天沒有按創建一個類自己的實例,如」不瞭解實例,自動裝配不起作用。 在你的情況,只是有run方法行

this.getFiles(); 

應該夠了。