我们就来看看那Spring到底是怎么运行的(一切为了工作)
Spring的简介:
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架
Spring主要是IoC以及AOP,那么我们就先来了解这两个词的含义
IoC:
控制反转,什么是控制反转了,就是控制权由对象本身反转到了容器里面,由容器去处理他们之间的依赖,那么又是什么控制权了,控制权就是对象间的关系以及对象的生命周期的控制权,也就是之前我们需要自己去new一个对象,如下图,我们以婚介为例我们的控制权在Man中,因为需要自己去找你需要的姑娘,然后见面了解她的年龄以及姓名,因为在这之前你们不会有任何交集
但是当我们使用了Spring的控制反转以后,这个步骤就可以直接交给Spring容器去做了,到这又引发了第二分支,Spring有三种方式的依赖注入,那么我们就来看看每一种都是怎么使用的吧
1、setter注入,我们可以发现,在Man这个类中,我们定义了Woman的一个私有属性,然后加上set方法,这就相当于我们将我们的需求告诉了一个婚姻介绍所,我们需要一个姑娘,然后将你自己的要求告诉婚介所,然后婚介所就会去寻找有没有姑娘符合这个要求,然后将信息返回给Man,之后的所有步骤都会交给婚介所去进行,你只需要告诉你的要求就行了
然后你需要写一个Spring的xml文件,这个我就不往复杂的写了,大家搜一下应该还是很多的,我就写一个简单的实例化过程就行,下图就简单的实例化过程
2、构造方法,我们还可以直接将数据以构造方法的形式传递
同样写一个简单的实现过程的xml
3、注解方式注入
这个就是配置文件中的一部分,我们需要配置xml文件使得Spring自动扫描,方便开发
到此我们大概了解了Spring是如何使用的,那么接下来我们就开始分析IoC的运行过程
IoC的启动也是分为两个步骤的,第一步是启动容器,第二步是实例化对象,这个就是简单了解了解,并没有什么实际意义,只是为了增加字数
IoC的实现:
技术或者代码实现我上面以及说了,那么IoC又是怎么实现他们之间的依赖的呢
IoC的依赖实现有两种方式:
a、BeanFactory:
这是一个基础的IoC容器,它只会在客户端使用到某个受管对象的时候才会对对象进行初始化以及依赖注入的操作,因为它初始化的资源有限,所以在初期会启动的比较快
BeanFactory在客户端需要对象的时候返回一个BeanDefinition对象,每一个BeanFactory都对应一个BeanDefinition,而且BeanDefinition还有对应的BeanDefinitionReader去解析配置文件,对应的解析xml文件的就应该是XMLBeanDefinitionReader,当解析完成以后,BeanDefinitionReader会将内容返回给BeanFactory
那么BeanFactory是怎么被创建的呢?
b、ApplicationContext:
ApplicationContext是BeanFactory的子类,所以ApplicationContext是包括了BeanFactory的所有实现,并且在BeanFactory上进行了扩展,所以ApplicationContext是比BeanFactory更加强大的,因为需要初始化更多资源,所以它在启动初期是比较慢的
就先简单的了解到这,因为东西太多,之后我会慢慢的去研究