Spring的IoC容器与上帝类

原创
2013/12/10 22:53
阅读数 3.1K

最近在准备一个分享,加上正好架构方面要做一个模块化的东西,就顺便学一下Spring了。SSH说起来都是老掉牙的东西,但是目前还是主流,公司也正在用,所以以后会花一些时间在这几个东西的学习上。

关于IoC的原理和简单实现,我觉得@黄勇的博文《IOC 实现原理》写得已经很好了,用不到100行代码就实现了一个简单的IoC容器。本文完全是基于你已经在使用Spring,想做进一步了解或定制这个场景,所以不评价IoC容器的优劣。本文基于Spring2.5.6。

Spring的容器类又叫BeanFactory,也有一个更高级的接口,ApplicationContext。后者我们用得更多。而ApplicationContext我们主要用两个实现:XmlWebApplicationContext和ClassPathXmlApplicationContext。前者在web环境使用,后者在主动加载时使用。

跟@黄勇的例子比,我觉得Spring容器最大的不同是:它不是一个单例,也不是静态类。这就意味着,我可以有多个ApplicationContext。那么可能有人问那Spring是如何注入的呢?答案是注入在初始化bean之后,注入的bean也仅限于同一容器,而不同容器之间的bean则划清了界限。所以在Spring里,其实是不存在上帝类的,而是存在一个个"国家",由不同的容器进行管理。

现在我们有需求就是有一些同级的jar包独立开发,然后要统一部署,很可能出现bean冲突的情况,而使用上帝类就会有局限性了。我写了一个扩展,为每个jar包限定一个容器,并用到了Spring的双亲委托机制,主要实现方式是load不同的xml。代码在这里:https://github.com/code4craft/tavern

展开阅读全文
加载中
点击加入讨论🔥(15) 发布并加入讨论🔥
打赏
15 评论
8 收藏
0
分享
返回顶部
顶部