初学JAVA项目(11、Ada银行-2)
前言
本次项目学习目标:
主要通过以项目为导向学习spring boot 框架
一、Ada银行-3
1.什么是IOC?
控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。
它还有一个名字叫做依赖注入(Dependency Injection)。
IoC不是什么技术,它是一种设计模式。通俗理解就是将接口的具体实现类的控制权从调用类中分离转交给第三方决定。
在 Spring 中有专门的一个容器来创建和管理这些对象,并将对象依赖的其他对象注入到该对象中,这个容器我们一般称为 IoC 容器。
IOC和DI描述的是一件事情,只是从不同的角度来描述:
- IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际上就是我们现在说的第三方,侧重于原理。
- DI依赖注入:说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。
BeanFactory
BeanFactory作为最顶层的一个接口类,它定义了IOC容器的基本功能规范,BeanFactory里面只对IOC容器最基本的行为做了定义,而不关心Bean是怎样定义和加载的。
如果我们想要知道一个工厂具体生产对象的过程,就需要去看这个接口的实现类。 我们可以发现最终的默认实现类是 DefaultListableBeanFactory,他实现了所有的接口。
BeanFactory 有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。
为何要定义这么多层次的接口呢?查阅这些接口的源码和说明发现,每个接口都有他使用的场合。
它主要是为了区分在 Spring 内部在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。
例如 ListableBeanFactory 接口表示这些 Bean 是可列表的,而 HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。这四个接口共同定义了 Bean 的集合、Bean 之间的关系、以及 Bean 行为.
IoC 在 Spring 里,只需要低级容器(BeanFactory)就可以实现,两个步骤:
- 加载配置文件,解析成 BeanDefinition 放在 Map 里。
- 调用 getBean 的时候,从 BeanDefinition 所属的 Map 里,拿出 Class
对象进行实例化,同时,如果有依赖关系,将递归调用 getBean 方法 —— 完成依赖注入。 FactoryBean
一般情况下,我们将 bean 的创建和管理都交给 Spring IoC 容器,Spring 会利用 bean 的 class 属性指定的类来实例化 bean。
但是如果我们想自己实现 bean 的创建操作,FactoryBean 就可以实现这个需求。
FactoryBean 是一种特殊的 bean,它是个工厂 bean,可以自己创建 bean 实例,如果一个类实现了 F