术语:
spring是一个生态,包含spring xxx各种我们日常说的东西。通常我们老是说“spring 如何如何”可以理解为一种简称,我们日常为了简便经常把spring framework简称为spring。 但本文就不会再这么说了,以下本文称spring framework,以免歧义。
直接上结论:
spring framework是一个bean容器。
如果要用最短的一句话来描述spring framework的本质,那么上面这句就是。
下面只是一些进一步的阐述。
- 它是
spring mvc、spring boot等多种所谓“spring应用”的基础。 - 具体来说,spring项目(各种依赖于
spring framework的应用)启动时,会根据 xxxApplicationContext的类型,分别去从xml配置文件、注解、或者WEB_INF路径下的配置文件等处去读取配置,最终根据配置,产生很多的bean并维护起来,这也就是说它是bean容器的原因 -
spring framework所谓的维护bean,可以大致理解为最终维护在一个 Map<String,BeanDefinetion> 里面的。 可以大致理解为 key就是beanName,value 是BeanDefinition。 其中BeanDefinition 可以立即为是Bean对象的一层封装,也就是提供了更多方法而已。就像我们开发中,如果有一个类的功能太少,不足以提供足够的功能,我们会再给它封装一层class。就是这个简单易懂的意思。 - 然后,
spring framework在产生xxxContext的过程中,还会通过beanFactoryPostProcessor等方法可以把上面提到的这个Map暴露出来,我们就可以控制这些bean的几乎任意行为。 - 另外,所谓
扩展spring framework,如果beanFactoryPostProcessor的自由程度依然不满足的话,可以自己写一个xxxContext,继承spring framework里面的xxxContext,重写各个方法,那就可以在产生bean的各个节点进一步控制,理论上基本上更加为所欲为,可任意操作了。
以下上传一个我在小组里做技术分享时的一个自制PPT。
spring framework.pptx
注:
上文所谓的 xxxApplicationContext,指的是诸如: WebApplicationContext、AnnotationConfigWebApplicationContext、ClassPathXmlApplicationContext之类的很多 xxxContext。










