method example bean java spring spring-mvc annotations factory-pattern

java - example - Basado en la anotación ServiceLocatorFactoryBean?



factory spring boot (1)

Me gustaría implementar el patrón Factory en mi proyecto. He pasado por recursos en línea y supe que se debe implementar SpringLocatorFactoryBean en lugar de un patrón normal de fábrica de Java.

He seguido este enlace pero está explicado en XML. ¿Puede alguien decirme cómo hacerlo usando anotaciones basadas en patrones de fábrica?


Guía de referencia de Spring Java Configuration @Configuration

Interfaz Parser.class

public interface Parser { void parse(String str); }

Implementación para la interfaz anterior.

JsonParser.java

public class JsonParser implements Parser { @Override public void parse(String str) { System.out.println("JsonParser.parse::" + str); } }

XMLParser.java

public class XMLParser implements Parser{ @Override public void parse(String str) { System.out.println("XMLParser.parse :: " + str); } }

ParserFactory.java Interfaz de fábrica real.

public interface ParserFactory { public Parser getParser(ParserType parserType); }

ParseType.java enum para especificar tipos de análisis (evitar errores tipográficos y seguros)

public enum ParserType { JSON("jsonParser"), XML("xmlParser"); private final String value; ParserType(String input) { this.value = input; } public String getValue() { return this.value; } @Override public String toString() { return this.value; } }

ParseService.java , donde se implementó la lógica empresarial.

@Service public class ParserService { @Autowired private ParserFactory parserFactory; public void doParse(String parseString, ParserType parseType) { Parser parser = parserFactory.getParser(parseType); System.out.println("ParserService.doParse.." + parser); parser.parse(parseString); } }

Finalmente la clase de configuración AppConfig.java Spring java, donde todos mis beans se registraron como beans administrados por contenedor.

@Configuration @ComponentScan(basePackages = {"<Your Package Name>"}) public class AppConfig { @Bean public FactoryBean serviceLocatorFactoryBean() { ServiceLocatorFactoryBean factoryBean = new ServiceLocatorFactoryBean(); factoryBean.setServiceLocatorInterface(ParserFactory.class); return factoryBean; } @Bean(name = "jsonParser") @Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE) public JsonParser jsonParser() { return new JsonParser(); } @Bean(name = "xmlParser") @Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE) public XMLParser xmlParser() { return new XMLParser(); } }

Ahora conecte ParserService bean ParserService en el controlador o las clases de prueba, e invoque el parese(String, ParseType) para probar.

Aquí está mi prueba.

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = AppConfig.class) public class ServiceLocatorFactoryExample { @Autowired private ParserService parserService; @Test public void testParserFactory() { parserService.doParse("Srilekha", ParserType.JSON); parserService.doParse("Srilekha", ParserType.XML); } }