基于注释的ServiceLocatorFactoryBean?

我想在我的项目中实现Factory模式。我已经浏览了在线资源,我开始知道应该实现Spring ServiceLocatorFactoryBean而不是普通的java工厂模式….

我已经按照这个链接,但它是基于xml解释….任何人都可以告诉我如何使用基于工厂模式的注释?

Spring Java Configuration参考指南@Configuration

接口Parser.class

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

以上接口的实现。

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实际的Factory接口。

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

ParseType.java枚举指定解析类型(避免拼写错误和安全)

 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 ,其中实现了业务逻辑。

 @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); } } 

最后是AppConfig.java Spring java配置类,其中我的所有bean都注册为容器托管bean。

 @Configuration @ComponentScan(basePackages = {""}) 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(); } } 

现在在控制器或测试类中自动assemblyParserService bean,并调用parese(String, ParseType)方法进行测试。

这是我的考试。

 @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); } }