2

我正在尝试在我的项目中使用 picoContainer。我对此知之甚少,但想试一试。

据我了解,我必须创建一个 picoContainer 并使用它注册组件。我做了这个

public static PicoContainer getPicoContainer(){
     final MutablePicoContainer pico = new DefaultPicoContainer();
     pico.registerComponentImplementation(X.class);
     pico.registerComponentImplementation(A.class);
     pico.registerComponentImplementation(C.class);
     pico.registerComponentImplementation(V.class);
     pico.registerComponentImplementation(T.class);
     pico.registerComponentImplementation(D.class);

     return pico;
}

现在我的问题是,对于任何组件来获取另一个组件,它需要一个 pico 句柄。要访问任何组件,它需要这样做

A juicer = pico.getComponent(A.class);

那么,在它们每个的构造函数中,我需要传入 pico 对象吗?我可以很容易地用工厂替换它。那有什么意义呢?我确定我在这里遗漏了一些东西。将不胜感激任何帮助。

4

1 回答 1

2

常见的模式是在某处为主容器建立一个工厂。对于独立应用程序,它可能是“public static void main()”入口点,对于 Web 应用程序,它将是前端控制器 servlet 或过滤器或上下文侦听器(pico 具有侦听器案例的支持类)。因此,在入口点,您以上面提到的“public static PicoContainer getPicoContainer()”的方式配置容器,然后您需要将控制权传递给容器中的入口点。好的方法是至少有一个容器的组件来实现生命周期接口(http://picocontainer.codehaus.org/lifecycle.html) 然后你 start() 容器并连接好所有东西。在正常情况下,您不应该在入口配置以及特殊工厂或事务分界等内容旁边访问容器本身。

于 2014-02-19T07:28:09.837 回答