Spring Boot IoC(二)IoC简介和BeanFactory

本文详细介绍了SpringBoot中的IoC(控制反转)概念及其核心功能,包括Bean的管理和依赖注入。通过描述Bean之间的关系,Spring的IoC容器能够有效地管理和组织应用程序中的对象。此外,还探讨了BeanFactory和ApplicationContext这两个关键接口的区别和联系。

上一篇 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

Spring 是有 IOC 容器的,且 Spring BootIOC 容器是基于 SpringIOC 容器发展而来的。SpringIOC 容器是整个框架中最核心、最关键的一部分内容,其中 BeanFactory 接口及其子类(接口)、ApplicationContext 接口及其子类实现都是 Spring IOC 容器的重要组成部分 [^1]。 由于 BeanFactory 的功能还不够强大,Spring 在其基础上设计了更为高级的接口 ApplicationContext,它是 BeanFactory 的子接口之一,在 Spring 的体系中 BeanFactory ApplicationContext 是最为重要的接口设计,现实中使用的大部分 Spring IOC 容器是 ApplicationContext 接口的实现类 [^2]。 Spring BootIOC 容器完成了一系列核心任务,如启动容器(基于 @SpringBootApplication ApplicationContext)、注册 Bean(通过组件扫描、配置类、自动配置)、依赖注入(构造器注入、Setter 注入、字段注入)等,这些功能都是在 Spring IOC 容器的基础上进行扩展优化的 [^3]。 以下是一个简单的 Spring 中获取 Bean 的示例代码: ```java import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan class AppConfig { // 配置类 } class Person { // Person 类 } public class Main { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); Person bean = ctx.getBean(Person.class); System.out.println(bean); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值