J'utilise spring boot et java configs, mais les buts @autowired
ne semblent pas marcher. Je reçois un NPE, j'ai vérifié d'autres questions dans SO mais je ne peux pas voir la raison de ce comportement. Ce qui suit est mon code: -spring boot autowired null pointeur exception
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;
}
La classe 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);
}
}
Pouvez-vous déplacer '@Bean public BuilderFactory builderFactory() {' méthode avant '@Autowired private BuilderFactory builderFactory;' variable membre dans la classe Main et essayez? – harshavmb
ne fonctionne pas !!!!! –
okies, avez-vous mis instruction sysout dans '@Bean public BuilderFactory builderFactory() {' méthode et vérifié si vous êtes en mesure d'imprimer les éléments dans la carte? Cela devrait indiquer si le bean est instancié ou non. – harshavmb