这是我第一次使用依赖注入,我有点困惑。
我真的不明白它是如何运作的。
我试过一个简单的例子:
public class StockResponse extends Response
{
@Inject BrandService $brand;
public List<StockResponseItem> stock;
public StockThresholdResponse()
{
stock = new ArrayList<>();
}
public static StockThresholdResponse create(List<DataItem> data)
{
StockResponse stock= new StockResponse();
for (ThresholdCheckAggregate data: d)
{
StockResponseItem item = new StockResponseItem();
item.id = d.thresholdId;
item.brand = str.$brand.byId(d.brand);
str.stockThresholds.add(item);
}
return str;
}
}
但是当我使用create()
方法时,我得到$brand
的空指针异常。
我想我误解了DI是如何工作的,但我找不到我的错误。
答案 0 :(得分:1)
我在理解DI(Java EE中的Guice)如何工作方面遇到了类似的困难。简单来说,Guice必须有机会修改You对象,例如:
injector.getInstance(cls)
,然后Guice正在为你创建对象,解决字段或构造函数注释在普通(非Java EE)环境中,Yoy从不调用经典构造函数,你是二手问。
其他方法。 很少有库/框架与Guice(我个人喜欢的Apache Wicket)在某些类型的对象上与“创建侦听器”集成。 DI的辛勤工作对你的眼睛来说是隐藏的,但却被执行了。
Java EE让我说EE程序员比我更好:(
因此,Yoy没有机会注入任何东西,是空的
专业人士抱歉我在金发女郎级别说。就像我几年前发现DI一样
对代码的更正。不
StockResponse stock= new StockResponse();
但是
mod = .... // Module
injector = Guice.createInjector(mod); // global or almost global
...
injector.getInstance(StockResponse.class);
编辑:故意我不回答“如何编写Guice模块”,假设这是其他的长篇故事
答案 1 :(得分:0)
这可能有效,假设BrandService是一个具体类或者它是一个接口,你已经为它配置了一个绑定到DI配置中其他地方的具体类(比如Guice或Spring @Configuration中的模块)。我确实看到一个带有NullPointerException
变量的明显str
。你的意思是这样做的吗?
item.brand = stock.$brand.byId(d.brand);