【学习Spring原理】之一:最基础的IOC容器接口——BeanFactory

首先,所谓Ioc容器,是指一个能够容纳和管理Bean的容器,而BeanFactory是Spring Ioc容器实现类必须遵守的一个最基础的接口。
《Spring源码深度解析》里有一个最简单的例子:
首先写一个最简单的Bean:

package com.ls.spring.bean;

public class MyBean {

    private String name = "Lon Bean";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

然后写一个xml配置文件beanFactory.xml,用来声明这个bean:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="myBean" class="com.ls.spring.bean.MyBean"/>

</beans>

最后再Test类里测试BeanFactory:

package com.ls.spring.bean.factory;

import com.ls.spring.bean.MyBean;
import org.junit.Test;
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;
import static org.junit.Assert.*;

@SuppressWarnings("deprecation")
public class BeanFactoryTest {

    @Test
    public void testSimpleLoad() {
        Resource resource = new ClassPathResource("beanFactory.xml");
        BeanFactory bf = new XmlBeanFactory(resource);
        MyBean bean = (MyBean) bf.getBean("myBean");
        assertEquals("Lon Bean", bean.getName());
    }
}

执行之前可以看出XmlBeanFactory就是BeanFactory的具体实现类之一(它继承自DefaultListableBeanFactory,一个非常核心的类),而且从类名不难看出,它是一个与xml有关的BeanFactory,也就是说它是一个可以读取以xml文件方式定义的BeanDefinition(这个以后再看,现在我可以理解为一个包含bean集合的一种数据结构)的容器。

执行Test,我们会发现assertEquals断言成功了,证明MyBean已成功实例化,并且BeanFactory对象成功管理了MyBean实例,通过getBean方法来获取MyBean实例。

其实上面Test执行的步骤可简单地概括为:
1.读取配置文件BeanFactory.xml。
2.在BeanFactory.xml中找到对应的Bean类,并实例化,然后把实例交给BeanFactory对象管理。
3.通过getBean方法从BeanFactory对象中获取实例化后的实例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章