上一篇 Spring Boot IoC(一)知识点整理思维导图
一、IoC简介
Spring最成功的不是技术成本,而是其提出的理念。它所依赖的两个核心理念,一个是控制反转(Inversion of Control,IoC
),另一个是面向切面编程(Aspect Oriented Programming,AOP
)。IoC
容器是Spring的核心,可是说Spring是一种基于IoC
容器变成的框架。SpringBoot是基于注解的开发Spring IoC。
一个系统可以生成各种对象,并且这些对象都需要进行管理。对象之间并不是孤立的,它们之间还可能存在依赖的关系。例如,一个班级是由多个老师和同学组成的,那么班级就依赖于多个老师和多个同学了。Spring还提供了依赖注入的功能,使我们能够通过描述来管理各个对象之间的关系。
为了描述上述的班级,同学和老师这三个对象的关系,我们需要一个容器。在Spring中把每个需要管理的对象称为Spring Bean
(简称Bean
),而Spring管理这些Bean的容器,称为IoC
容器。
IoC具备的基本功能:
- 通过描述管理Bean,包括发布和获取Bean。
- 通过描述完成Bean之间的依赖关系。
二、顶级接口BeanFactory
IoC容器是一个管理Bean的容器。在Spring的定义在中,它要求所有的IoC容器都需要实现BeanFactory
接口,它是一个顶级容器接口。
BeanFactory
接口源码
public interface BeanFactory {
//前缀
String FACTORY_BEAN_PREFIX = "&";
//多个getBean方法获取Bean
Object getBean(String name) throws BeansException;
<T> T getBean(String name, @Nullable Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
//是否包含Bean
boolean containsBean(String name);
//Bean是否单例
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
//Bean是否原型
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
//是否类型匹配
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, @Nullable Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
//获取Bean的类型
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
//获取Bean的别名
String[] getAliases(String name);
默认情况下,Spring IoC
容器中的Bean
都是以单例存在的。
由于BeanFactory
的功能不够强大,因此Spring在BeanFactory的基础上,设计了一个更为高级的接口ApplicationContext,它是BeanFactory的子接口之一,在Spring的体系中,BeanFactory和ApplicationContext是最为重要的接口设计,在现实中我们使用的大部分Spring IoC容器是ApplicationContext接口的实现类。
具体设计如下UML图
ApplicationContext接口通过继承上级接口,进而继承BeanFactory接口,在BeanFactory的基础上,扩展了消息国际化接口(MessageSource),环境可配置接口(EnviromentCapable)、应用事件接发布接口(ApplicationEventPublisher)和资源模式解析接口(ResourcePatternResolver),所以功能会更强大。