1

この春の初心者の質問をお許しください。私は初版の第 4 章を読んでいて、コールバック メソッドと Bean ポスト プロセッサの両方を紹介しています。

今、私は2つについて混乱しているだけです。どちらもsthを行うようです。Bean インスタンスが作成されたとき、どうすれば 2 つを区別できますか? 多分例は良いでしょうか?

私の個人的な理解では、違いを見つける必要がある場合、Bean が実際に作成されたときにコールバック メソッドが開始され、Bean ポスト プロセッサは Bean の作成の少し後に呼び出されますか? また、違いもあると思います。その初期化コールバック メソッドは 1 つの Bean のみに焦点を当てますが、Beanpost プロセスはすべての Bean インスタンスを 1 つずつ処理しますか?

また、JSR250 アノテーション @PreDestroy と @PostConstruct を上記の 2 つの概念と比較して対比することで、違いをさらに説明するのを手伝ってくれる人はいますか?

助けてくれてありがとう!

4

2 に答える 2

4

これらのいずれかを使用してからしばらく経ちましたが、コールバックメソッドと @PostConstruct メソッドは同じものだと思います。しかし、あなたの質問に答えるために、違い....

1) @PostConstruct (または afterPropertiesSet) メソッドは、Bean がインスタンス化された後に呼び出される特定のクラスの内部メソッドです。これは実際にタイプ固有のアクションを配置する場所です。

2) BeanPostProcessor はすべての Spring Bean に触れます。したがって、必ずしもクラス固有ではなく、分野横断的な機能を配置できる場所がここにあります。

小さな例として、友人とその住所を追跡するための小さな住所録アプリケーションがあるとします。追跡できないクレイジーなバグがある場合は、BeanPostProcessor を使用して、「現在 Address.getStreet() を呼び出している...、現在 Address.getCity() を呼び出している」などのログですべての Spring Bean をラップすることがあります。 ..」。

ここで、Address で @PostConstruct メソッドを使用して、市/州しかない住所の Web サービスに対して郵便番号を検証および検索することができます。

さて、実際にはドメイン オブジェクトの 1 つが Web サービスにヒットすることはないかもしれませんが、@PostConstruct がクラス固有のものを処理でき、BeanPostProcessor が複数のクラスにまたがるものを処理できることを示すことを目的としています。

また、BeanPostProcessor には、オーバーライドする 2 つのメソッドがあります。postProcessBeforeInitialization と postProcessAfterInitialization です。これにより、Bean の @PostConstruct メソッドの前後に何を実行するかを決定できます。

于 2012-11-16T02:27:13.657 に答える
0

Bean ポスト プロセッサ インターフェイスには、2 つのコールバック メソッドがあります。1. PostProcessBeforeInitializationPostProcessAfterInitializationです。 PostProcessBeforeInitializationメソッドは、Bean の init-method または afterPropertySet メソッドを呼び出す直前に呼び出されます。

PostProcessAfterInitializationメソッドは、Bean の初期化が完了した直後に呼び出されます。

Bean ポスト プロセッサは、Bean の初期化の前後に何かを行う機会を与えます。

于 2016-10-04T05:02:09.820 に答える