2017-06-18 6 views
1

Ich benutze Spring Boot und Java-Konfigurationen, aber @autowired scheint nicht zu funktionieren. Ich bekomme eine NPE, ich habe andere Fragen in SO überprüft, aber ich kann nicht den Grund sehen, warum dieses Verhalten. Es folgt mein Code: -Spring Boot Autowired Nullzeiger Ausnahme

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

Die BuilderFactory Klasse: -

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

Können Sie verschieben @Bean öffentliche BuilderFactory BuilderFactory() {'Methode vor' @Autowired private BuilderFactory BuilderFactory; 'Member-Variable in Hauptklasse und versuchen? – harshavmb

+0

funktioniert nicht !!!!! –

+0

okies, haben Sie Sysout-Anweisung in '@Bean öffentlichen BuilderFactory BuilderFactory() {' -Methode setzen und überprüft, ob Sie in der Lage sind, die Elemente in der Karte zu drucken? Dies sollte zeigen, ob die Bean instanziiert ist oder nicht. – harshavmb

Antwort

4

Wenn Sie eine Instanz einer Klasse selbst, wie in der folgenden Zeile

Main main = new Main(); 

Frühling doesn schaffen‘ Ich weiß nichts über die Instanz und Autowinding funktioniert nicht. In Ihrem Fall haben nur die Linie

this.getFiles(); 

in der run-Methode genug sein sollte.

Verwandte Themen