我在理解iPOJO中组件实例的概念时遇到了一些问题。我读this guide 和我得到的比喻类和对象,但我仍然有一些具体的问题,而且我希望有人能澄清如何做iPOJO实例化
我认为我需要通过iPOJO创建实例一些概念上的问题(@Instantiate或工厂)只有服务提供商,因为他们从来没有使用新因为impl总是隐藏。但是,我有一些消费者可以实例化我自己(例如在main()方法中,我直接调用新的)。我让他们@组件,因为他们需要注入东西。我假设ipojo字节码的操作会使它在构造对象时,会注入它们的依赖关系(我主要使用方法注入方式@Bind),但似乎并非如此。请有人向我澄清这一点。现在看来,对于iPOJO来说,我需要始终使用其中一种iPOJO实例化技术。我遇到的问题是,我在消费者类中创建的构造函数未被调用。
这是一个简单的例子来说明我的困惑
@Component(name="test")
public class MyFoo {
private List<External> externals; //injected
private Bar bar; //passed via constructor. Bar is *not* a @Component
public MyFoo(Bar otherBar) {
bar = otherBar;
externals = new ArrayList();
}
@Bind(aggregate=true)
public addExternal(External service) {
externals.add(service);
}
}
所以,在这里可以看到,我需要有接口External
所有的供应商,但我也需要一个Bar
对象,我通过当我建立基于对象new MyFoo(someBar)
我的问题是,如果我需要一个Bar
传递给构造函数,然后我需要使用新;但如果我使用新的,iPojo永远不会调用我的注入方法。另一方面,如果我使用iPOJOs实例化(比如添加@Instantiate),那么注入的确发生了,但是构造函数没有被调用,所以绑定会抛出一个NPE,因为列表还没有被创建,所以bar不会被设置。我知道我可以在绑定方法中创建列表,但我的问题更具概念性。
- 你应该如何完成这个(框架注入+参数传递给构造函数)?
- iPOJO如何在不调用创建对象的唯一构造函数的情况下调用addExternal(意味着该对象已创建)?这在标准java中是非常直观的
- 你是否应该在使用iPOJO组件时使用构造函数?
很好的答案!在过去的两天里,我学到了很多东西,并使其工作,但我没有使用构造函数注入或@Properties。我将纳入这一点。谢谢 – Hilikus