Spring IOC

IOC原理

IOC(inversion of control):控制反转

  • Spring Core最核心部分
  • 依赖注入(Dependency Inversion)

DI:把底层类作为参数传递给上层类,实现上层对下层的“控制”
在这里插入图片描述

依赖注入的方式

  • Setter
  • Interface
  • Constructor
  • Annotation

依赖倒置原则,IOC,DI,IOC容器的关系

在这里插入图片描述

IOC容器的优势

  • 避免在各处使用new来创建类,并且可以做到统一维护
  • 创建实例的时候不需要了解其中的细节
    在这里插入图片描述
    在这里插入图片描述

Spring IOC

在这里插入图片描述

功能

  • 依赖注入
  • 依赖检查
  • 自动装配
  • 支持集合
  • 指定初始化方法和销毁方法
  • 支持回调方法

核心接口

  • BeanFactory
  • ApplicationContext
BeanDefinition

主要用来描述bean的定义

在这里插入图片描述

BeanDefinitionRegistry

提供向IOC容器注册BeanDefinition对象的方法

BeanFactory

提供IOC的配置机制

包含Bean的各种定义,便于实例化Bean

建立Bean之间的依赖关系

Bean生命周期的控制

在这里插入图片描述

BeanFactory 与 ApplicationContext 的比较
  • BeanFactory 是 Spring 框架的基本设施,面向Spring
  • ApplicationContext面向使用Spring框架的开发者
ApplicationContext的功能
  • BeanFactory:能够管理、装配bean
  • ResourcePatternResolver:能够加载资源文件
  • MessageSource:能够实现国际化等功能
  • ApplicationEventPublisher:能够注册监听器,实现监听机制
@Autowired 和 @Resource区别

前者会优先以名字去寻找对应的bean,通常是与bean相同的名字但是首字母是小写

后者优先以类型去寻找对应的bean

如果类型和名字都相同可以使用@Primary在bean中声明,首选此bean,或是用@Qualifier在需要注入的bean中指向需要的bean

getBean方法的代码逻辑
  • 转换beanName
  • 从缓存中加载实例
  • 实例化Bean
  • 检测parentBeanFactory
  • 初始化依赖Bean
  • 创建Bean
Sping Bean的作用域
  • singleton:Spring的默认作用域,容器里拥有唯一的Bean实例,适合无状态的bean
  • prototype:针对每个getBean请求,容器都会创建一个Bean实例,适合有状态的bean(创建时需要三思:多次创建和销毁bean会产生明显的开销)

如果是web容器还支持以下三种

  • request:会为每个Http请求创建一个Bean实例
  • session:会为每个session创建一个Bean实例
  • globalSession:会为每个全局Http Session创建一个Bean实例,该作用域仅对Portlet(使用PortletContext时有效)有效(Protlet 是一种运行时环境)
生命周期

在这里插入图片描述

销毁过程
  • 如果实现了DisposableBean接口,则会调用destroy方法
  • 如果配置了destry-method属性,则会调用其他配置的销毁方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妄想一步登天的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值