美文网首页
一、Spring核心篇

一、Spring核心篇

作者: 起飞的雏鸟 | 来源:发表于2017-05-15 23:45 被阅读0次

    第2章 Spring Framework的核心:IoC容器的实现


    2.1 Spring IoC容器概述


    1.IOC容器 和 控制反转模式。

    什么是控制反转?  控制反转就是将对象的控制交给容器去做,而不是在一个对象内部直接控制。是关于一个对象如何获取它所依赖的对象的引用,反转指的是责任的反转。控制的什么被反转了?就是:获得依赖对象的方式反转了。

    什么是依赖注入?依赖注入是指容器动态的将某个对象的依赖注入到组件中,注入所需要的外部资源。

    “谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”:

    ●谁依赖于谁:当然是应用程序依赖于IoC容器

    ●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源

    ●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象

    ●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

    http://blog.csdn.net/bestone0213/article/details/47424255

    2.2 IoC容器系列的实现:BeanFactory和ApplicationContext


    BeanFactory 作用:实例化,配置,管理Bean。


    /**    * 用来引用一个实例,或把它和工厂产生的Bean区分开,就是说,如果一个FactoryBean的名字为a,那么,&a会得到那个Factory    */    String FACTORY_BEAN_PREFIX = "&";

    /*    * 四个不同形式的getBean方法,获取实例    */

    Object getBean(String name) throws BeansException;

    T getBean(String name, ClassrequiredType) throws BeansException;

    T getBean(Class requiredType) throws BeansException;

    Object getBean(String name, Object... args) throws BeansException;

    boolean containsBean(String name); // 是否存在

    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;// 是否为单实例

    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;// 是否为原型(多实例)

    boolean isTypeMatch(String name, Class targetType)

    throws NoSuchBeanDefinitionException;// 名称、类型是否匹配

    Class getType(String name) throws NoSuchBeanDefinitionException; // 获取类型

    String[] getAliases(String name);// 根据实例的名字获取实例的别名


    BeanFactory继承结构:

    继承关系

    BeanFactory只提供基本的IOC容器功能。

    需要依赖其他的接口来实现功能。例如XmlBeanFactory:

    XmlBeanFactory继承自DefaultListableBeanFactory,扩展了从xml文档中读取bean definition的能力。从本质上讲,XmlBeanFactory等同于DefaultListableBeanFactory+XmlBeanDefinitionReader ,如果有更好的需求,可以考虑使用DefaultListableBeanFactory+XmlBeanDefinitionReader方案,因为该方案可以从多个xml文件读取资源,并且在解析xml上具有更灵活的可配置性。典型构造方法:

    public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {

    super(parentBeanFactory);

    this.reader.loadBeanDefinitions(resource);

    }

    通过XmlBeanFactory 可以清楚的揭示IOC容器实现中的那先关键类(Resource,DefaultListableBeanFactory 和 BeanDefinitionReader)之间的调用关系,他们是如何把IOC容器的功能解耦,又是如何结合在一起为IOC容器服务的。

    编程式使用IOC容器:

    -----------------------------------------------------------------------------------------------------------------

    ClassPathResource res = new ClassPathResource("beans.xml");

    DefaultListableBeanFactory factory = new DefaultListableBeanFactory();

    XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);

    reader.loadBeanDefinitions(res);

    ------------------------------------------------------------------------------------------------------------------

    1、创建IoC配置文件的抽象资源,这个抽象资源包含了BeanDefinition的定义信息。

    2、创建一个BeanFactory,这里使用DefaultListableBeanFactory。

    3、创建一个载入BeanDefinition的读入器,这里使用XmlBeanDefinitionReader来载入XML文件形式的BeanDefinition,通过一个回调配置给BeanFactory。

    4、从定义好的资源位置读入配置信息,具体的解析过程由XmlBeanDefinitionReader来完成。

    ClassPathResource

    http://www.cnblogs.com/davidwang456/p/4204569.html



    2.3 IoC容器的初始化


    1.Resoure定位过程;寻找数据

    2.BeanDefinition载入过程;

    3.向IOC容器注册BeanDefinition过程;



    2.4 IoC容器的依赖注入



    2.5 容器其他相关特性的实现



    2.6 小结

    http://www.cnblogs.com/davidwang456/p/4204569.html

    http://www.cnblogs.com/davidwang456/p/4204569.html

    http://www.cnblogs.com/davidwang456/p/4204569.html

    相关文章

      网友评论

          本文标题:一、Spring核心篇

          本文链接:https://www.haomeiwen.com/subject/hsdkxxtx.html