术语:
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。
注:
上文所谓的
xxxApplicationContext
,指的是诸如:WebApplicationContext
、AnnotationConfigWebApplicationContext
、ClassPathXmlApplicationContext
之类的很多 xxxContext。