PicoContainer两分钟入门手册/Two minute tutorial

http://www.picocontainer.org/Two+minute+tutorial


这个手册可以让你在2分钟内快速入门,但是它不会告诉你为什么要这么做,如果你想知道的话,请看下一篇《五分钟介绍》


下载和安装
下载jar文件,并把它添加到你的classpath环境变量中
下载地址:http://www.picocontainer.org/Download

写两个简单的组件

public class Boy {
    public void kiss(Object kisser) {
        System.out.println("I was kissed by " + kisser);
    }
}public class Girl {
    Boy boy;

    public Girl(Boy boy) {
        this.boy = boy;
    }

    public void kissSomeone() {
        boy.kiss(this);
    }
}

装载组件

MutablePicoContainer pico = new DefaultPicoContainer();
pico.registerComponentImplementation(Boy.class);
pico.registerComponentImplementation(Girl.class);


实例化并使用组件

Girl girl = (Girl) pico.getComponentInstance(Girl.class);
girl.kissSomeone();

getComponentInstance方法将会先观察Girl类,它发现Girl需要一个Boy作为构造器的参数,所以,它会先创建一个Boy对象,然后传递给Girl,最后才创建Girl对象。
注意:Girl对象并没有主动去获取一个Boy对象,而是通过容器提供给它的。这叫做“好莱坞原则”————“不要找我,我会找你的”。


Introduce an interface for the dependency
Change the Boy class to implement a Kissable interface and change the Girl class to depend on Kissable instead.

为依赖引入接口
修改Boy类使它实现Kissable接口,而Girl则依赖于Kissable接口

public interface Kissable {
    void kiss(Object kisser);
}public class Boy implements Kissable {
    public void kiss(Object kisser) {
        System.out.println("I was kissed by " + kisser);
    }
}

 

public class Girl {
    Kissable kissable;

    public Girl(Kissable kissable) {
        this.kissable = kissable;
    }

    public void kissSomeone() {
        kissable.kiss(this);
    }
}
装载组件:


MutablePicoContainer pico = new DefaultPicoContainer();
pico.registerComponentImplementation(Boy.class);
pico.registerComponentImplementation(Girl.class);

运行:
Girl girl = (Girl) pico.getComponentInstance(Girl.class);
girl.kissSomeone();

Boy将会被传递给Girl,因为 PicoContainer 知道它是一个 Kissable。

 Girl和Boy将不会有任何的依赖,这叫做依赖注射原则。从此以后两个组件不再互相依赖,而依靠接口凑在一起。

使用简单的生命周期管理
改写Girl类,使之实现简单的生命周期管理。

public class Girl implements Startable {
    Kissable kissable;

    public Girl(Kissable kissable) {
        this.kissable = kissable;
    }

    public void start() {
        kissable.kiss(this);
    }

    public void stop() {
    }
}
装载组件之后,不再像之前那样直接调用Girl类,而是使用如下方式:

pico.start();

这将会实例化所有实现了Startable接口的组件,并调用他们的start方法。要停止或销毁容器可以使用以下方式:

pico.stop();
pico.dispose();

posted on 2005-03-12 17:34  Na57  阅读(678)  评论(0编辑  收藏  举报