IOC总结03

  <<深入spring技术内幕>>这本书中由详细的介绍关于IOC容器的实现原理。需要跟着代码走,多看几遍,结合Java一些基础知识(xml,类加载,反射机制)等。脑海中应该由一个路线:解析spring配置文件,就是对xml文件的解析(使用xml技术)。xml中配置的都是哪些要纳入IOC容器中的,如何让这些类加入容器。在spring中使用BeanDefinition这个接口,里面规范了xml文件中定义类的信息,id,class,bean等,用这个类封装这些数据,进行统一管理。然后调用类加载机制,反射机制,对类进行初始化工作。总得来说要多看几遍,跟着源码的顺序走,了解它的作用,最后再阅读的话,就不再那么头痛。理解了IOC容器实现对整个spring体系都很有帮助,基本上所有的功能都是建立在IoC容器上。如AOP原理。

  总结:

使用IoC容器时,需要的步骤:
1,创建IoC配置文件的抽象资源,这个抽象资源包含了BeanDefintion的定义信息。
2,创建一个BeanFactory,这里使用DefaultListableBeanFactory(它的功能最齐全)。
3,创建一个载入BeanDefinition的读取器,这里使用XmlBeanDefinitionReader来载入XML文件形式的BeanDifinition,通过一个回调配置给BeanFactory。
4,从定义好的资源位置读入配置信息,具体的解析过程由XmlBeanDefinitionReader来完成。完成整个载入和注册Bean定义之后,需要的IoC容器就建立起来了。
ClasssPathResource res = new ClassPathResource("beans.xml");
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(res);
-----
IoC容器的初始化过程
IoC容器初始化时由refresh()方法启动的,这个启动包括BeanDefinition的Resouce定位,载入和注册三个基本过程。Spring把这三个过程分开,并使用不同的模块来完成,如使用ResourceLoader,BeanDefinitionReader等模块,用户可以灵活对这三个过程进行裁剪或扩展,定义出最适合自己的IoC容器的初始化过程。
第一过程是Resource定位过程。
第二过程是BeanDefinition的载入。这个载入过程是把用户定义好的Bean表示成IoC容器内部的数据结构,而这个容器的内部数据结构就是BeanDefinition。BeanDefinition实际上就是POJO对象在Ioc容器中的抽象,通过这个BeanDefinition定义的数据结构,市Ioc容器能够方便地对POJO对象(bean)进行管理。
第三过程市向Ioc容器注册这些BeanDefinition的过程。这个过程是通过调用BeanDefinitionRegister接口完成的。这个注册过程把载入过程的解析得到的BeanDefinition向IoC容器进行注册。在IoC容器内部将BeanDefinition注入到一个HashMap中去,IoC容器通过这个HashMap来持有这些BeanDefinition数据的。
注:在SPring Ioc的设计中,Bean定义的载入和依赖注入是两个独立过程。依赖注入一般发生在应用第一次通过getBean向容器索取Bean的时候。(可以通过预实例化设置进行提前初始化,通过lazyinit属性设置)。
---------------
一,BeanDefinition的Resource的定位
在项目常用的是ClassPathXmlApplicationContext("beans.xml")是从class path载入Resource;还有XmlWebApplicationContext用在Web容器中载入Resource和FileSystemXmlApplicaitonContext是用在文件系统载入Resource。
------------
getBean()方法中,FactoryBean实现
这些FactoryBean为应用生产需要的对象,往往是经过特殊处理的,如ProxyFactoryBean这样的特殊bean;
bean = getObjectBeanInstance(sharedInstance,name,beanName,mbd);这个方法中对产生的bean进行了特殊处理
其中shouldPostProcess后置处理器。
这种FactoryBean的机制可以为我们提供一个很好的封装机制,比如封装Proxy,RMI,JNDI等。

BeanPostProcessor的实现(后置处理器)(AOP的作用不是这样的吗)
这个Bean的后置处理器是一个监听器,他可以监听触发的事件。

猜你喜欢

转载自www.cnblogs.com/lazyli/p/10795634.html