我有一些代码可以将文本数据解析为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处理从类型到解析器的映射?
谢谢!
答案 0 :(得分:0)
我不是100%肯定,因为我从未尝试过这个但你可以使用AOP查看运行时依赖注入。
答案 1 :(得分: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 annotaion进行配置。
您可以使用spring config xml:
实例化您的解析器<bean id="parser1" class="com.myCompany.parsers.Parser1"/>
<bean id="parser2" class="com.myCompany.parsers.Parser2"/>