2017-06-18 20 views
1

私はスプリングブートとjava configsを使用していますが、@autowiredは動作していません。 私はNPEを取得しているので、私は他の質問を調べましたが、この動作がなぜ発生するのかわかりません。私のコードを以下に示します。 -スプリングブートautowired nullポインタ例外

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クラス: - あなたは「

Main main = new Main(); 

春はdoesnの次の行のように、クラス自身のインスタンスを作成

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 公共BuilderFactory builderFactory(){ ''メソッド@Autowired プライベートBuilderFactory builderFactory前を移動することはできますか? – harshavmb

+0

は動作しません!!!!! –

+0

okies、 '@Bean public BuilderFactory builderFactory(){'メソッドにsysout文を入れて、マップに要素を出力できるかどうかチェックしましたか?これは、Beanがインスタンス化されているかどうかを示すはずです。 – harshavmb

答えて

4

インスタンスを知っていないので、オートワイヤリングが機能しません。あなたのケースで は、ちょうど十分なはずrunメソッド内の行

this.getFiles(); 

を持ちます。メインクラスの `メンバ変数としてみてください。

関連する問題