Ioc容器概念以及形象比喻:
1,我们通常所说的IOC容器 实际上是代表了一系列的功能各异的产品 只是容器的功能大小,功能不同 各有特点。
2,,IOC比喻:就像水桶一样 有金属的 有塑料的 有各种形状的 只要能装水都可以叫做水桶 但是在选择水桶之前 弄明白各个水桶的特点及用处 无疑会增加对水桶的选择的准确性 IOC容器亦是如此 所以我们有必要了解各种IOC容器的特性
3,BeanFactory和ApplicaitonContext都可以看成是容器的具体表现形式。
4,BeanFactory是容器的顶级接口之一 BeanFactory就像是接口基本功能的定义 。
5,BeanFactory比喻:还是水桶 , 水桶的基本需要是可以装水 那么可以装水就是水桶基本功能的定义 BeanFactory就像水桶的可以装水的基本功能定义
6,Spring通过定义BeanDefinition来管理基于Spring的应用中的各种对以及它们之间的相互依赖关系 BeanDefinition就是对反转依赖模式中管理的对象依赖关系的数据的抽象
7,BeanDefinition比喻 BeanDefinition就像是水桶中的水 有了BeanDefinition的作用下 对象之间的依赖关系才被管理起来 容器才生效
8,Spring默认创建的Bean都是Singleton的
9,BeanFactory可以认为是IOC容器的基本形式 而各种ApplicaitonContext的实现是IOC容器的高级表现形式
10,举例:我们最熟悉的XmlBeanFactory 顾名思义 就一种以读取xml格式文件来完成Bean创建和维护依赖关系的BeanFactory 在XmlBeanFactory中初始化了一个XmlBeanDefinitionReader对象 有了这个对象 以xmL格式定义的BeanDefinition就有了处理的地方(还记得在第7条中我说的么BeanDefinition就是水桶里的水 就是对象之间依赖关系 在这里就是xml中描述的对象间的依赖关系) 也就是这些xml形式的信息是交给XmlBeanDefinitionReader来处理的 于是我们可以通过读取xml数据 比如Spring给我们提供的Resource类 然后将Resource实例作为参数传给XmlBeanFactory的构造函数 这样就让XmlBeanFactory完成的初始化以及依赖注入功能
11,最后提一下DefaultListableBeanFactory这个类 许多Bean工厂的具体实现类都是继承DefaultListableBeanFactory这个类 这个类可以理解为IOC容器的基本功能的一个类 以后会经常提起。。。
代码:
public class Car {
}
// beans.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
<beans>
</beans>
// BeanFactoryTest.java
package com.baobaotao.beanfactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class BeanFactoryTest {
}