0

こんにちは、アノテーションと Spring AOP は初めてです。以下は私が達成しようとしているものです

public interface Service {
    public void process(String ServiceName, Bean bean);
}

public class ServiceImpl1 implements Service{
    public void process(String ServiceName, Bean bean) {

        /// do something here    
    }
}

public class ServiceImpl2 implements Service{
    public void process(String ServiceName, Bean bean) {

        /// do something here
    }
}

他のクラスから私は次のようなものを呼び出します

...

public void doSomething(String serviceName, Bean bean){

    service.process("ServiceImpl1", bean); 

}
...

AroundAdvice と Before アドバイスを使用して doSomething メソッドをインターセプトし、serviceName を読み取った後にサービス オブジェクトをインスタンス化することで、同じことを実現できます。

これにはより良いアプローチがありますか?

方向性が必要なだけで、それを理解します。

ありがとう

4

2 に答える 2

0

さて、あなたがやりたいことは、渡されたサービス名を受け取り、適切なクラスのオブジェクトを作成し、その新しく作成されたオブジェクトで適切なメソッドを呼び出す Before アドバイスを持つことだと思います。私には、あなたはもっと Factory パターンを探しているように思えますが、それを実現するために AOP を使用しようとしています。

Factory パターンを採用した場合は、ServiceFactory というクラスを作成します。このクラスは、いくつかのパラメーターを取り、それらのパラメーターの正しい Service 実装を返します。コードを呼び出すと、単純に Factory を使用して、実行時に適切な Service を取得します。

DI パターンに固執したい場合の別のアプローチは、「コンダクター」として機能するラッパー クラスを作成することです。これには、Service 実装へのサービス名のマップがある場合があります。次に、このラッパーをコードに挿入し、Map をラッパーに挿入することもできます。呼び出し元のコードは、ラッパーのメソッドを呼び出します。これにより、正しいシングルトン実装が特定され、その呼び出しが集約されます。

これにAOPを使用するのは面倒だと思います。

于 2013-02-22T13:52:42.953 に答える
0

spring @Autowire アノテーションを使用してサービス impl クラスを注入できます。u には 2 つの実装クラスがあるため、修飾子を使用して、どの impl を注入する必要があるかを指定できます。

于 2013-02-22T14:53:43.400 に答える