3

必要なクラスがあります

  1. 使用するさまざまな Bean の依存性注入
  2. 初期化の実行時パラメータ

クラスはこれに似たものになります

public class Validator {

    @Autowired
    private ServiceA serviceA;

    @Autowired
    private ServiceB serviceB;

    private String s;

    private ClassA a;
    private ClassB b;

    public void initialize(String s, ClassA a, ClassB b) {
        this.s = s;
        this.a = a;
        this.b = b;
    }

    public void performTaskA() {
        //use serviceA, serviceB, s, a and b
    }

    public void performTaskB() {
        //use serviceA, serviceB, s, a and b
    }

    public void performTaskC() {
        //use serviceA, serviceB, s, a and b
    }

}

上記のクラスをSpring Beanとして定義し(依存性注入を利用するため)、呼び出し元が performTask*() メソッドを呼び出す前に initialize() を呼び出すようにするためのさまざまなオプションは何ですか?

注 - 認識しObject getBean(String name, Object... args) throws BeansException;ていますが、型の安全性が失われるため、見栄えがよくありません。他の提案はありますか?

更新 -ここで言及されているルックアップ メソッド インジェクションを使用したソリューションは、優れたオプションです。春に実装されるまで、内部クラスを使用する以下の代替案についてどう思いますか

public class MyService {
    private ServiceA serviceA;
    private ServiceB serviceB;

    public class DataClass {
        private Integer counter;

        public DataClass(Integer counter) {
            this.counter = counter;
        }

        public Integer performActionAndGetCount() {
            serviceB.performAction();
            return this.counter++;
        }
    } 
}

//client module
MyService service = beanFactory.getBean("myService");
MyService.DataClass dataClass = service.new DataClass(1);

このアプローチの欠点はありますか?

4

3 に答える 3

0

コンポーネント、サービス、またはリポジトリのアノテーションを使用して、クラスにアノテーションを付けます。これにより、クラスをSpring Beanと見なすことができ、依存性注入と実行時の初期化を使用できます。

{dispatcher-servlet} .xml({}の名前をweb.xmlのディスパッチャーサーブレットに付けた名前に置き換えてください}ファイルにこの行を書き込んだことを確認してください

于 2012-06-07T12:24:21.900 に答える
-1

私はあなたの要件についてあまり明確ではありません。しかし、 @PostConstruct アノテーション付きメソッドが助けになると思います。@PostConstruct アノテーションの詳細については、こちらを参照してください。

これがお役に立てば幸いです。乾杯。

于 2012-06-07T12:16:39.930 に答える