spring思想学习----IOC容器
?
? ? 接着上篇讲,这里先介绍下Java Bean概念。
????JavaBean具有一个无参构造器和getter/setter方法。可以作为数据对象的载体,也可以作为业务组件实现商业逻辑。和EJB重量级组件而言,通常把JavaBean成为轻量级组件。
????IOC容器:容器就是运行组件环境,上篇已经介绍过了,这里理解下IOC,控制反转。不过更适合成为DI,依赖注入。
????首先理解下为什么要用IOC?
?
?
public class BookService { private BookDao bookDao = new HibernateBookDao(); ... }?
?
一般我们就按照以上方式编码,这种会有以下几种缺点:
????(1)硬编码BookDao,若换成MybatisBookDao,则需要修改BookService代码
????(2)此BookDao组件的生命周期被BookService管理,无法共享此组件。就是外部需要用到BookDao组件时,需要BookService提供getter方法,访问BookDao,而这种方式很挫
????(3)若BookDao又依赖DataSource,这种组件间依赖耦合度更高
????此外还有其他缺点,比如测试复杂等
????
????OK,从上面可以看出,系统中有大量组件,而其生命周期和相关依赖由组件自己管理,会大大增加系统复杂度,组件间耦合度,增加测试和维护的困难。
????传统应用程序,控制权在应用程序本身,开发者创建BookService组件,在创建BookService组件过程中,再创建BookDao组件,然后使用BookService组件为用户服务。
????在IOC模式下,控制权发生了发转:组件的创建从应用程序转移到IOC容器,组件采用“注入”机制,将一种组件“注入”到另一种组件中。
????关于IOC的“注入机制”,有set等方式,这里不再介绍。