6
我想實現工廠模式在我project..i已通過網上資源走了,我才知道,春天ServiceLocatorFactoryBean應該實現的,而不是普通的Java工廠模式....基於註釋的ServiceLocatorFactoryBean?
我按照this鏈接但它是在基於XML的解釋....可以任何人告訴我如何使用基於工廠模式的註釋?
我想實現工廠模式在我project..i已通過網上資源走了,我才知道,春天ServiceLocatorFactoryBean應該實現的,而不是普通的Java工廠模式....基於註釋的ServiceLocatorFactoryBean?
我按照this鏈接但它是在基於XML的解釋....可以任何人告訴我如何使用基於工廠模式的註釋?
的Spring Java配置參考指南@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實際工廠接口。
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,其中商業邏輯Implemeted一個。
@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配置類,所有我的豆註冊爲容器管理豆。
@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();
}
}
現在,在任一控制器或測試類裏面自動裝配ParserService
豆,並調用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);
}
}
非常感謝@Lovababu。它正在工作。你讓我今天一整天都感覺很好。 – kumar
我嘗試過使用您提供的示例,但在ParserFactory行的ParseService.java文件上出現autowiring錯誤。 '嵌套的異常是org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有爲依賴關係找到的類型的合格bean:期望至少有1個bean有資格作爲這個依賴關係的autowire候選。依賴註釋:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}' – kumar
如果我將@Autowired註釋移除到ParserFactory,那麼我沒有得到上述異常,但我得到NullPointerException。 – kumar