通过容器完成依赖关系的建立
虽然MoAttack和LiuDeHua实现了解耦,无需关注实现类的实例化工作,但这些工作在代码中依然存在,只是转移到Director中而已,导致导演的权力非常大,潜规则不断滋生。假设某一制片人想改变这一局面,在相中某个剧本后,通过一个“海选”或者第三公正中介来选择导演、演员,让他们各司其职,那剧本、导演、演员就都实现解耦了。
所谓媒体“海选”和中介机构在程序领域即是一个第三方容器,它帮助我们完成类的初始化和装配工作,让我们从这些底层的实现类实例化,依赖关系的装配中脱离出来,专注于更有意思的业务代码的编写工作,那确实是挺惬意的事情。Spring就是这样一个容器,它通过配置文件描述类之间的依赖关系,下面是Spring配置文件的对以上实例进行配置的样式代码:
<beans>
<bean id="geli" class="com.baobaotao.LiuDeHua"></bean>
<bean id="moAttack" class=" com.baobaotao.MoAttack">
<property name="geli"><ref bean="geli"/></property>
</bean>
</beans>
通过new XmlBeanFactory(“beans.xml”)等方式即可启动容器,在容器启动时,Spring根据配置文件的描述信息,通过Java的反射机制自动实例化Bean并完成依赖关系的建立,从容器中即可返回准备就绪的Bean实例,以待后续的使用。
小结
随着Spring的广泛应用,IoC的概念被越来越多的提及,可是很多说者因为IoC本身的晦涩往往并不清楚其中的意义,我们通过时下叫座的贺岁大片《墨攻》来解释IoC的概念,相信对加深IoC概念的理解有所补益。
