2012-07-12 53 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"/> 
相关问题