多くの既存のコードを持つサーブレットがあります。その一部に依存性注入を追加しようとしています。現在、私は手動でやっています:
public class AdjustBookPriceHandler extends BookRequestHandler {
@Override
public void handleRequest(RequestState requestState, RequestData requestData, Object obj) {
Book book = (Book) obj;
long newPrice = Long.parseLong(requestData.getQueryParam("price");
OfferRepository offerRepository = ((BookData) requestState.getData()).getOfferRepository();
BookPriceAdjuster priceAdjuster = getBookPriceAdjuster();
priceAdjuster.adjustPrice(newPrice);
}
protected BookPriceAdjuster getBookPriceAdjuster(RequestState requestState, RequestData requestData, Book book) {
return new BookPriceAdjuster(book, offerRepository);
}
}
ここでは、本とオファーのリポジトリの依存関係が、コンストラクターを介して BookPriceAdjuster に注入されます。getBookPriceAdjuster メソッドは、AdjustBookPriceHandler から継承するクラスが別の価格調整機能を提供できるようにするために存在します。
Guice のような DI フレームワークの使用を開始して、複雑な例で導入されるボイラープレート コードの一部を削減したいと考えています。ただし、このコンテキストでそれを使用する最善の方法はわかりません。
「神」オブジェクト RequestState および RequestData から関連する依存関係を引き出すバインディングを作成するにはどうすればよいですか? それとも、この時点でフレームワークを使用することは、同じように複雑で厄介でしょうか?