spring-mini之ioc.md

关于spring-Mini

​ spring是一集大成者,通过spring集成和管理了许许多多的框架。本着就学习倒腾轮子的目的,本文将叙述博主倒腾轮子的思路化繁为简,理解Spring的功能。

​ 此外,在倒腾spring-mini时对Tiny-Spring,spring 3.0源码以及《Spring技术内幕》进行了相关的参考。而本篇博文主要涉及IOC思想,以及就ClassPathXmlApplicationContext来实现一个简单的IOC容器.

关于IOC思想

Ioc的意思是控制权从应用程序转移到框架(如IOC容器).IOC的本质是:创建对象和装配对象,管理对象生命周期,被动实例化,被动接受依赖,被动装备(工厂+反射+xml配置文件或注解)

ClassPathXmlApplicationContext

  • BeanFctory:IOC的基本功能是由BeanFactory来定义的,在spring-mini中的BeanFactory提供的getBeanByName和getBeanByType的方法定义IOC的最基本形式.
  • AbstractBeanFactory:实现了BeanFactory接口以及Bean定义注册接口的注册,获取和移除Bean定义。并用beanCollection,definitionBeanNameMap和definitionbeanClassMap三个currentHashMap存储bean实力以及定义。
  • AutowireCapableBeanFactory 实现抽象工厂的BeanFactory工厂生成bean的工厂以及装配bean属性。
  • AbstractApplicationContext作为ApplicationContext的抽象类定义了bean定义加载器以及实现BeanFactory的两个基本方法.
  • ClassPathXmlApplicationContext做为读取xml文档里面的bean定义实现了loadBeanDefinitions,通过XmlBeanDefinitionReader读取xml文档并实现了BeanDefinition的资源定位,载入和解析的功能。

关于spring-mini.xsd

为了实现xml的方式注册,通过idea逆向工厂定义了bean定义相关的xsd文件,用于配合生成applicationContext.xml。详细可参考文末的源码出处。

总结

到此 spring-mini的组成介绍基本完成。需要提到的是Tiny-Spring对我的参考意义确实很重大,在一个月前参考spring 3.0 的ioc 随意写了一下一个叫做IocAndAop的项目,无奈的是spring的ClassPathXmlApplicationContext的xml读取对于作为新手的我来说功能太过复杂,而IocAndAop几近夭折,后面在gitHub上搜到Tiny-Spring 让我眼前一亮。在IocAndAop已有的功能上借鉴Tiny-spring,因而,spring-mini诞生。

不足之处

  • spring-mini博主个人爱好的驱动下,参考spring源码和网上的博客完成,问题应该是有的。
  • 为了并发安全BeanFactory的底层实现采用的是currentHashMap,,但是遗憾的是没能够在spring-mini里面进行测试,个人猜想需要引入servlet。

后期展望

在已有的spring-mini的IOC基础上再实现aop以及后面采用注解方式实现。

源码地址

Spring-Mini

参考链接

Tiny-Spring

[我对IoC/DI的理解]

你可能感兴趣的:(spring-mini之ioc.md)