如何确定在Spring中使用哪个类?

时间:2012-07-12 00:09:18

标签: spring

我有一些代码可以将文本数据解析为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处理从类型到解析器的映射?

谢谢!

2 个答案:

答案 0 :(得分:0)

我不是100%肯定,因为我从未尝试过这个但你可以使用AOP查看运行时依赖注入。

Spring AOP and dependency injection

答案 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"/>