0

我有一些将文本数据解析为 Java 对象的代码。有几个基于 json 值的解析器可用。例如,当 type=1 时,使用 parser1,type=2 使用 parser2 等。

我的代码如下:

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处理从类型到解析器的映射?

谢谢!

4

2 回答 2

0

您无法避免检查映射,您必须以一种或另一种方式告诉 spring 在每个状态中选择什么解析器。

您可以使用具有一个 getParser 方法的 ParserFactory 很好地实现它。例如:

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

如果你喜欢,你可以拥有一个 Parser 列表并使用 @Resource 注释对其进行配置。

您可以使用 spring config xml 实例化您的解析器:

<bean id="parser1" class="com.myCompany.parsers.Parser1"/>
<bean id="parser2" class="com.myCompany.parsers.Parser2"/>
于 2012-07-13T09:07:43.800 回答
0
于 2012-07-12T04:54:02.340 回答