zoukankan      html  css  js  c++  java
  • spring ioc源码阅读总结

    springioc指的是spring的控制反转,在没用spring前,传统的构造对象一般都是new一个对象,这样的new出来的对象就与类耦合度很高,并且创建销毁都得通过自己写代码去实现。而spring的ioc,他是将对象都注册到ioc容器中,对象的创建和销毁都有spring控制,你只需要告诉spring你是什么,你需要什么,spring就会在合适的时机把你需要的对象创建好给你,这样耦合度就会大大降低。
    比如首先通过xml文件启动一个spring容器,new classpathxmlApplicationContext(),关键是从 AbstractApplicationContext的refresh()方法开始,这个方法里首先会调用preparerefresh()方法检查xml文件有效性,然后调用obtainFreshBeanFactory()方法,这个方法主要有三点,第一是创建了一个defaultlistablebeanfactory,也就是beanfactory第二是设置了beanfactory的两个属性,一个是是否允许bean循环引用第二个是是否允许bean覆盖,第三点是调用的loadbeandefinition()方法加载了bean定义,在这个方法里调用了doloaddocument的readdocument()方法以及XmlBeanDefinitionReader()方法解析了xml文件,至此obtainFreshBeanFactory()方法执行结束。
    然后会执行prepareBeanFactory(beanFactory)方法,这个方法里首先会执行 postProcessBeanFactory()方法,提供了子类的扩展点,可以在这里进行对子类扩展的操作,然后会执行invokeBeanFactoryPostProcessors(beanFactory);调用 BeanFactoryPostProcessor 各个实现类的 postProcessBeanFactory(factory) 方法,接着会执行 registerBeanPostProcessors(beanFactory)方法, 注册 BeanPostProcessor 的实现类,这个实现类主要有两个方法,postProcessBeforeInitialization 和 postProcessAfterInitialization,也就是在bean初始化前后执行的操作。然后回执行国际化,创建监听器等方法,然后会执行 finishBeanFactoryInitialization(beanFactory)方法,这是一个重点,这个方法会初始化所有非懒加载的单例bean。这个方法里会调用getbean()方法,这个方法通过三步来初始化bean对象,第一是调用createbeaninstance()初始化一个bean对象,然后调用populatebean方法()给bean赋属性,第三是调用initializeBean()方法初始化bean对象,这个方法里会先检查是否实现了 BeanNameAware、BeanClassLoaderAware 或 BeanFactoryAware 接口,如果实现了则回调相关方法,然后会执行刚才注册的postProcessBeforeInitialization 方法,进行bean初始化前置处理,然后调用初始化方法,然后调用 postProcessAfterInitialization,进行bean的初始化后置处理,这样就完整的初始化了一个bean对象。

  • 相关阅读:
    CentOS下用yum命令安装jdk【转】
    Maven中的-D(Properties属性)和-P(Profiles配置文件)
    Mac Maven配置
    MVC从路由到Controller运行机制
    IIS与ASP.NET对请求的处理
    免费SSL证书(支持1.0、1.1、1.2)
    C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
    InstallShield Limited Edition Project 打包windows服务解析
    InstallShield Limited Edition使用说明
    因为数据库正在使用,所以无法获得对数据库的独占访问权---还原或删除数据库的解决方法
  • 原文地址:https://www.cnblogs.com/wl889490/p/13221799.html
Copyright © 2011-2022 走看看