ICR*_*ICR 5 java dependency-injection guice god-object
我有一个拥有大量现有代码的Servlet.我正在尝试将依赖注入添加到其中的一部分.目前我手动完成:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这里通过构造函数将书和提供存储库依赖项注入BookPriceAdjuster.getBookPriceAdjuster方法允许从AdjustBookPriceHandler继承的类提供不同的价格调整器.
我想开始使用像Guice这样的DI框架来减少复杂示例所引入的一些样板代码.但是,我不确定在这种情况下使用它的最佳方法.
如何编写从"神"对象RequestState和RequestData中提取相关依赖关系的绑定?或者在这一点上使用框架就像复杂和混乱一样?
我不确定我是否正确理解你想要做什么。这本书是请求范围的,而 OfferRepository 是单例范围的?如果是这样你可以做这样的事情..
public class AdjustBookPriceHandler extends BookRequestHandler {
// inject concrete instance with setter or constructor
private BookPriceAdjusterProvider bookPriceAdjusterProvider;
@Override
public void handleRequest(RequestState requestState, RequestData requestData, Object obj) {
Book book = (Book) obj;
long newPrice = Long.parseLong(requestData.getQueryParam("price");
BookPriceAdjuster priceAdjuster = bookPriceAdjusterProvider.getBookPriceAdjuster(book);
priceAdjuster.adjustPrice(newPrice);
}
}
public interface BookPriceAdjusterProvider {
BookPriceAdjuster getBookPriceAdjuster(Book book);
}
public class MyBookPriceAdjusterProvider {
// inject this through setter or constructor
private OfferRepository offerRepository;
protected BookPriceAdjuster getBookPriceAdjuster(Book book) {
return new BookPriceAdjuster(book, offerRepository);
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您就摆脱了单例范围的 OfferRepository,并可以使用一些 DI 框架来为您进行注入。如果您的子类等需要,您也可以使用 BookPriceAdjusterProvider 的不同实现。这是你想要的还是我完全误解了你的目标?
归档时间: |
|
查看次数: |
320 次 |
最近记录: |