I want to be able to autowire a singleton bean (foo)
@Component
public class FooUser {
@Autowire Foo foo;
}
created by ano
Spring Boot: factory method
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
enum ParsersConst {
bofa, jpm, wellsforgo
}
interface Parser {
String readFromFile(String file);
}
class JPM implements Parser {
@Override
public String readFromFile(String file) {
System.out.println("From JPM Parser");
//LOGIC to read file data
return "JPM";
}
}
class Bofa implements Parser {
@Override
public String readFromFile(String file) {
System.out.println("From Bofa Parser");
//LOGIC to read file data
return "BOFA";
}
}
class WellsForgo implements Parser {
@Override
public String readFromFile(String file) {
System.out.println("From Wellsforgo Parser");
//LOGIC to read file data
return "WellsForgo";
}
}
class ParserCreator {
private Map parserMap;
public Parser createParser(ParsersConst parsConst) {
Parser parser = parserMap.get(parsConst);
if (parserMap.get(parsConst) != null) {
return parser;
}
throw new IllegalArgumentException("Unknown Parser");
}
public void setParserMap(Map parserMap) {
this.parserMap = parserMap;
}
}
@Configuration
class ParserConfig {
@Bean
public ParserCreator parserCreatorFactory() {
ParserCreator factory = new ParserCreator();
Map map = new HashMap();
map.put(ParsersConst.bofa, new Bofa());
map.put(ParsersConst.wellsforgo, new WellsForgo());
map.put(ParsersConst.jpm, new JPM());
factory.setParserMap(map);
return factory;
}
@Bean
public Parser bofa() {
return parserCreatorFactory().createParser(ParsersConst.bofa);
}
@Bean
public Parser wellsforgo() {
return parserCreatorFactory().createParser(ParsersConst.wellsforgo);
}
@Bean
public Parser jpm() {
return parserCreatorFactory().createParser(ParsersConst.jpm);
}
}
@Component
public class StaticFacotryDemo implements CommandLineRunner {
@Autowired
private ApplicationContext context;
@Override
public void run(String... args) throws Exception {
Parser parser = (Parser) context.getBean(ParsersConst.jpm.toString());
System.out.println(parser.readFromFile("jan_stmt.pdf"));
}
}