zoukankan      html  css  js  c++  java
  • spring IOC的理解

    1.什么是spring IOC

    IOC(Inversion of Control)即控制反转,在我们以往的编程中如果需要一个bean往往需要去手动去new一个出来。而spring帮我们解决了这个问题,在spring中我们只需要去定义bean,spring就会自动的帮我们实例化并管理Bean。而这些Bean就管理在spring容器中。

    2.什么是spring 容器

    相信在此之前各位小伙伴也看过一些spring容器先关的介绍,感觉很高端有没有....竟然可以自动的管理Bean。其实spring容器只是有若干的Map组成的。

    3.与spring容器相关的组件:

    (1). BeanDefinition(Bean的定义)

    举个例子:

    ①首先我们定义一个User类,并在xml文件中配置:

    ②启动Bean容器我们看看BeanDefinition中有什么

    我们发现在xml文件中配置的属性与BeanDefinition相同,因此在spring中BeanDefinition用来表示我们配置的一个个<bean/>

    (2)BeanDefinitionRegistry(用来注册BeanDefinition的容器),这是一个接口,其实现类为DefaultListableBeanFactory。

    我们来看看DefaultListableBeanFactory的源码:

    ①其内含有一个ConcurrentHashMap用来存储Bean的定义

    /** Map of bean definition objects, keyed by bean name */
        private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(256);

    ②registerBeanDefinition方法用来讲我们的BeanDefinition注册到DefaultListableBeanFactory中

    @Override
        public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
                throws BeanDefinitionStoreException {

    (3)DefaultSingletonBeanRegistry:用来管理我们的单例Bean

     
    /** Cache of singleton objects: bean name --> bean instance */
        private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256);  //用来存储完成的Bean实例
    

    4.总结

         所以我们一般所指的spring容器包括三个Map,其中DefaultListableBeanFactory中的map用来管理我们的BeanDefinition,而DefaultSingletonBeanRegistry中的map用来管理我们的单例Bean。

      这里只是介绍下对于spring IOC以及spring容器的理解,具体的流程参考bean的生命周期。

  • 相关阅读:
    BZOJ1106[POI2007]立方体大作战tet
    BZOJ4407 于神之怒加强版
    BZOJ1103: [POI2007]大都市meg
    BZOJ3170: [Tjoi2013]松鼠聚会
    Luogu 2912 [USACO08OCT]牧场散步Pasture Walking
    BZOJ1251 序列终结者- splay
    BZOJ1699: [Usaco2007 Jan]Balanced Lineup排队
    BZOJ 1005[HNOI2008]明明的烦恼
    二叉树
    [CODEVS1130]数字反转
  • 原文地址:https://www.cnblogs.com/liwangcai/p/10737339.html
Copyright © 2011-2022 走看看