Spring Boot IoC(二)IoC简介和BeanFactory

版权声明:From Lay https://blog.csdn.net/Sadlay/article/details/83277063

上一篇 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),所以功能会更强大。

下一篇 Spring Boot IoC(三)装配Bean

猜你喜欢

转载自blog.csdn.net/Sadlay/article/details/83277063