2012-07-12 25 views
0

我有一些解析文本數據到Java對象的代碼。有幾個基於json值的解析器可用。例如當類型= 1,使用parser1,類型= 2使用parser2等如何確定在Spring中使用哪個類?

我的代碼是這樣的:

interface Parser { 
    Data parse(Input data); 
} 

class Parser1 implements Parser { 
} 

class Parser2 implements Parser { 
} 


switch(type) 
{ 
    case 1: 
    return parser1.parse(data); 
    case 2: 
    return parser2.parse(data); 
    default: 
    return null; 
} 

我不喜歡手動檢查類型和手動選擇解析器。有沒有辦法讓spring處理從type到parser的映射?

謝謝!

回答

0

你不能避免用於映射的檢查,你將不得不告訴春天在一個或其他方式在每個國家選擇什麼解析器。

您可以使用ParserFactory非常好地實現它,該ParserFactory將有一個getParser方法。 例如:

public class ParserFactory { 

@Autowire 
@Qualifier("parser1") 
Parser parser1; 

@Autowire 
@Qualifier("parser2") 
Parser parser2; 

public static Parser getParser(String value){ 
    if(value.equals("x")){ 
     return parser1; 
    }else if (value.equals("y")){ 
     return parser2; 
    } 
} 
} 

如果你喜歡,你可以有解析器的列表,並與@Resource annotaion配置。

可以使用Spring配置XML實例解析器:

<bean id="parser1" class="com.myCompany.parsers.Parser1"/> 
<bean id="parser2" class="com.myCompany.parsers.Parser2"/> 
相關問題