IOC是将对象内部的依赖解藕将原先内部的控制反转给了类之外又称DependenceInjection IoC的几种实现类型 (1)Type1接口注入 通常做法是利用接口将
调用者与实现者分离。 publicclassSport{ privateInterfaceBallball;//InterfaceBall是定义的接口 publicvoidinit(){ //Basketball实现了InterfaceBall接口 ball=(InterfaceBall)Class.forName("Basketball").newInstance(); } } Sport类在编译期依赖于InterfaceBall的实现,为了将
调用者与实现者分离,我们动态
生成Basketball类并通了强制类型转换为InterfaceBall。ApacheAvalon是一个典型的Type1型IoC容器。 (2)setter
方法注入 在类中暴露setter
方法来实现依赖关系。 publicclassSport{ privateInterfaceBallball; publicvoidsetBall(InterfaceBallarg){ ball=arg; } } 这种方式对已经习惯了JavaBean的程序员而言,更显直观。Spring就是实现了该类型的轻量级容器。 (3)Type3构造子注入 即通过构造
方法完成依赖关系。 publicclassSport{ privateInterfaceBallball; publicSport(InterfaceBallarg){ ball=arg; } } 可以看到,通过类的构造
方法建立依赖关系。由于Type3在构造期就形成了对象的依赖关系,即存对象的重用变的困难。有些框架需要组件提供一个默认的构造
方法,此时就体现了Type3的局限性。通常所有的参数都是通过构造
方法注入的,当对象间的依赖关系较多时,构造
方法就显的比较复杂,不利于单元测试。PicoContainer就是实现了Type3依赖注入模式的轻量级容器。