Java 方法结束(@Autowire)后松开已设置的实例/null

Java 方法结束(@Autowire)后松开已设置的实例/null,java,spring,autowired,Java,Spring,Autowired,我试图设置解析器依赖于URI。 我正在调试它。 当条件为OK时,将设置my parserParent,但在setParser()方法的末尾,parserParent再次为null。我试图在继承类中结合asigning@Autowired注释,但总是得到相同的NullPointer错误。 如何修复它 问题出在哪里 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web

我试图设置解析器依赖于URI。 我正在调试它。 当条件为OK时,将设置my parserParent,但在setParser()方法的末尾,parserParent再次为null。我试图在继承类中结合asigning@Autowired注释,但总是得到相同的NullPointer错误。 如何修复它

问题出在哪里

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import pl.manciak.excelparser.ParseAndSave.ParseCsvAndSaveToDB;
import pl.manciak.excelparser.ParseAndSave.ParseXlsxAndSaveToDb;
import pl.manciak.excelparser.ParseAndSave.ParserParent;

import java.io.IOException;

@RestController
public class RestClientSave {

    private ParserParent parserParent;
    private ParseCsvAndSaveToDB parseCsvAndSaveToDB;
    private ParseXlsxAndSaveToDb parseXlsxAndSaveToDb;

    private String whichParser= "csv"; //HARDCODED FOR SIMPLICITY

    @Autowired
    public void setParser( ParseCsvAndSaveToDB parseCsvAndSaveToDB,
                           ParseXlsxAndSaveToDb parseXlsxAndSaveToDb) {

        if (whichParser.equals("csv")) {
             parserParent = parseCsvAndSaveToDB; // HERE PARSER IS SETTED
        }else if(whichParser.equals("xlsx")) {
            this.parserParent = parseXlsxAndSaveToDb;
        }
    } 

    @GetMapping("/save/{whichParser}")
    public String save(@PathVariable String whichParser) throws IOException {
        this.whichParser= whichParser;
        setParser( parseCsvAndSaveToDB, parseXlsxAndSaveToDb); // HERE IS AGAIN NULL
        parserParent.save();
        return "data saved";
    }
}
解析器的父类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pl.manciak.excelparser.DataService;
import pl.manciak.excelparser.Entity.LinesEntity;
import pl.manciak.excelparser.Entity.MapEntity;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

@Service
public class ParserParent {

    protected DataService dataService;
    protected LinesEntity linesEntity;
    protected ArrayList<String> list;

    protected HashMap<Long, LinesEntity> xlsMapped = new HashMap<>();
    protected MapEntity mapEntity = new MapEntity();

    @Autowired
    public ParserParent(DataService dataService ) {
        this.dataService = dataService;
    }

    public void save() throws IOException {}

}

import org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Service;
导入pl.manciak.excelparser.DataService;
导入pl.manciak.excelparser.Entity.LinesEntity;
导入pl.manciak.excelparser.Entity.MapEntity;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.HashMap;
@服务
公共类ParserParent{
受保护的数据服务数据服务;
受保护的线人线人;
受保护的数组列表;
受保护的HashMap xlsmap=新HashMap();
受保护的MapEntity MapEntity=新MapEntity();
@自动连线
公共ParserParent(数据服务数据服务){
this.dataService=dataService;
}
public void save()引发IOException{}
}
儿童班

package pl.manciak.excelparser.ParseAndSave;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pl.manciak.excelparser.DataService;
import pl.manciak.excelparser.Entity.LinesEntity;

import java.io.*;

import java.util.ArrayList;

import java.util.Collections;

@Service
public class ParseCsvAndSaveToDB extends ParserParent{

    @Autowired
    public ParseCsvAndSaveToDB(DataService dataService) {
        super(dataService);
    }

    public void save() throws IOException {

         //Stream to Read Csv file
        FileReader fileReader = new FileReader("usda_sample.csv");
        BufferedReader br = new BufferedReader(fileReader);

        //read first line
        String line = br.readLine();

        long mapKey = 0;

            while (line != null) {

                linesEntity = new LinesEntity(); // create a new LinesEntity for this loop execution
                list = new ArrayList<>();
                Collections.addAll(list, line.split(","));
                line = br.readLine();
                linesEntity.setSingleLine(new ArrayList<>(list));
                dataService.saveOne(linesEntity);
                xlsMapped.put(mapKey, linesEntity);

                mapKey++;
            }
        mapEntity.setMapa(xlsMapped);

        System.out.println(xlsMapped);

        dataService.save(mapEntity);

    }

package pl.manciak.excelparser.ParseAndSave;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Service;
导入pl.manciak.excelparser.DataService;
导入pl.manciak.excelparser.Entity.LinesEntity;
导入java.io.*;
导入java.util.ArrayList;
导入java.util.Collections;
@服务
公共类ParseCsvAndSaveToDB扩展了ParserParent{
@自动连线
公共ParseCsvAndSaveToDB(数据服务数据服务){
超级(数据服务);
}
public void save()引发IOException{
//流来读取Csv文件
FileReader FileReader=新的FileReader(“usda_sample.csv”);
BufferedReader br=新的BufferedReader(文件读取器);
//读第一行
String line=br.readLine();
长映射键=0;
while(行!=null){
linesEntity=newlinesentity();//为此循环执行创建一个新的linesEntity
列表=新的ArrayList();
Collections.addAll(list,line.split(“,”);
line=br.readLine();
linesEntity.setSingleLine(新数组列表(list));
dataService.saveOne(linesEntity);
xlsmaped.put(映射键,linesEntity);
mapKey++;
}
setMapa(xlsmap);
系统输出打印LN(XLS映射);
dataService.save(mapEntity);
}
问题已解决!:D

以下是代码:

@RestController
public class RestClientSave {

    ParseCsvAndSaveToDB parseCsvAndSaveToDB;
    ParseXlsxAndSaveToDb parseXlsxAndSaveToDb;

    @Autowired
    public RestClientSave(ParseCsvAndSaveToDB parseCsvAndSaveToDB, ParseXlsxAndSaveToDb parseXlsxAndSaveToDb) {
        this.parseCsvAndSaveToDB = parseCsvAndSaveToDB;
        this.parseXlsxAndSaveToDb = parseXlsxAndSaveToDb;
    }

    public ParserParent setParser(ParseCsvAndSaveToDB parseCsvAndSaveToDB,
                                  ParseXlsxAndSaveToDb parseXlsxAndSaveToDb,
                                  String whichParser) {
        ParserParent parserParent = null;

        if (whichParser.equals("csv")) {
             return parserParent = parseCsvAndSaveToDB;
        }else if(whichParser.equals("xlsx")) {
             return parserParent = parseXlsxAndSaveToDb;
        }

        return parserParent;
    }

    @GetMapping("/save/{whichParser}")
    public String save(@PathVariable String whichParser) throws IOException {

        ParserParent parent = setParser( parseCsvAndSaveToDB, parseXlsxAndSaveToDb, whichParser);
        parent.save();

        return "data saved";
    }
}