框架也是一个软件,大多数软件的运行一般都有几个通用的步骤:
- 加载配置文件;
- 运行;
1. Spring 的配置文件
对于Spring来说,xml,properties,yaml,class都是配置文件。
对,Java 的 class 文件对于Spring来说确实是一种配置文件,只不过比较特殊而已,其实想想也正常,xml可以描述一个Java对象,class也能描述一个Java对象,那其实它们之间在这个角度来说只有写法不同而已,最终要传递的信息是一样的,就像录音和文字,虽然看到的样式不一样,本质信息是一致的。
xml、properties 、yaml 这里不讨论。主要看 Bean定义。
BeanDefinition 是什么 ?
Spring 的 BeanDefinition 其实就是对 Java 的 class 文件的一种扩展。
用来干什么 ?
- BeanDefinition ----描述----> Bean 。
- 类----描述---->对象。
Spring 的 BeanDefinition 在class的基础扩展了更多Spring自己的东西,比如:作用域,Spring的注解(@Controller、@Service、@Component...) 等等。
就像 Java 根据 class 生成对象,最终Spring会根据 BeanDefinition 来生成 Bean。
2. 容器
Spring容器怎么来的 ?
Spring的容器其实是对基础数据结构
(用的最多的还是HashMap) 的拓展。
- ArrayList ----扩展了---->数组;
- Spring ----扩展了----> HashMap;
软件通常由数据
和操作数据的方法
组成。class 文件本质上是用来描述
数据以及如何操作数据的方法。
数组对数据的操作方式
基本没有,所以ArrayList扩展了它,而Spring 觉得 HashMap 对数据的操作方式
不够自己用,所以扩展了它。而且是层层扩展(扩展已有的类
用继承),所以会有 BeanFactory,ApplicationContext。
注意这里主要扩展的就是操作数据的方式
,在其他语言叫函数,Java叫方法,本质就是操作数据的方式
。最直接的方式就是继承,这样原来的操作方式都有,再加一些自己的操作方式就可以了,当然还有聚合,只不过聚合,如果原来的操作方式还要的话,就需要写同名方法,并委托给内部的原对象执行,比较麻烦。
为什么叫容器 ?
容器是存放数据
的,就像 数组是容器,ArrayList是容器,HashMap是容器,那么 BeanFactory 和 ApplicationContext 只是在 HashMap 容器的基础上扩展了一些 操作方法,本质还是存放数据的,叫容器也很通顺。
网友评论