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

タイプを手動でチェックしてパーサーを手動で選択するのは好きではありません。スプリングにタイプからパーサーへのマッピングを処理させる方法はありますか?

ありがとう!

4

2 に答える 2

0

これを試したことがないので、100%確信はありませんが、AOPを使用して実行時の依存性注入を探すことができます。

SpringAOPと依存性注入

于 2012-07-12T04:54:02.340 に答える
0

マッピングのチェックを回避することはできません。各状態で選択するパーサーを何らかの方法でSpringに指示する必要があります。

1つの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;
    }
}
}

必要に応じて、パーサーのリストを作成し、@Resourceannotaionを使用して構成できます。

springconfigxmlを使用してパーサーをインスタンス化できます。

<bean id="parser1" class="com.myCompany.parsers.Parser1"/>
<bean id="parser2" class="com.myCompany.parsers.Parser2"/>
于 2012-07-13T09:07:43.800 に答える