Spring 框架中的核心组件只有三个:Core、Context 和 Beans。它们构建起了整个 Spring 的骨骼架构。
简单理解: spring core是工具,context是环境(容器),而bean则是主角。关系如图
如上图:core包侧重于帮助类,操作工具。beans包更侧重于bean实例的描述。context更侧重全局控制,功能衍生。
core
core是spring的核心工具包,负责提供spring的核心原理的实现工具和核心原理的底层功能实现所需的工具,比如实现动态代理功能的asm框架、aspectJ等等。
提供功能但不调用就是spring core的存在意义。而上层的服务会调用底层的core来实现它们各自的功能,上层服务只需要调用就好了。
context
主要分成三种context:XML,Annotation,Groovy针对三种形式。
我们知道Bean包装的是Object,而Object必然有数据,如何给这些数据提供生存环境就是Context要解决的问题。
对Context来说他就是要发现每个Bean之间的关系,为它们建立这种关系并且要维护好这种关系。所以Context就是一个Bean关系的集合,这个关系集合又叫Ioc容器,一旦建立起这个Ioc容器后Spring就可以为你工作了。
context调用别人的功能:
Context作为Spring的Ioc容器,基本上整合了Spring的大部分功能,或者说是大部分功能的基础,所以它调用了大部分的spring core中的方法。
我们一般使用applicationContext时都是web应用,由web服务器来进行控制容器的启动。
Bean
前面已经说明了 Bean 组件对 Spring 的重要性,下面看看 Bean 这个组件式怎么设计的。Bean 组件在 Spring 的 org.springframework.beans 包下。这个包下的所有类主要解决了三件事:Bean 的定义、Bean 的创建以及对 Bean 的解析。
对 Spring 的使用者来说唯一需要关心的就是 Bean 的创建,其他两个由 Spring 在内部帮你完成了,对使用者来说是透明的。
Spring Bean 的创建时典型的工厂模式,他的顶级接口是 BeanFactory。通过接口的不断继承,beanfactory被不断的丰富抽象起来。层层细分之后,没有个类都的职责都变的单一了,同时在扩展该的属性时也变的更加方便。针对源代码,最好的办法还是根据名称来,最方便。
其他
1.工厂BeanFactory,如果使用BeanFactory来加载Spring配置文件,那么是在调用getBean时,框架调用对象的默认构造方法来创建对象。BeanFactory功能是对bean对象的生命周期进行管理的。(创建,初始化,销毁)。
2.ApplicationContext(推荐,也是框架默认的)对象来加载Spring配置文件,会在加载时解析配置文件,创建对象,而不是在getBean时创建。其实,ApplicationContext接口继承了BeanFactory,所以具备BeanFactory所有功能,同时增加扩展的功能,例如加载资源配置文件,国际化支持等!