Spring 的 IOC
1. 什么是IOC IOC的好处
IOC的思想是将需要的对象通过外部传入进来,而不是自己创建。这样的设计方式更加灵活。在Spring中对象之间的依赖关系也是由IOC容器来维护(类与类之间的依赖关系,使用与被使用)。
IOC的设计也是根据设计模式原则中依赖倒置原则。
IOC 控制反转。通过DI依赖注入可以实现控制反转。IOC与DI的关系如下图所示。
DL 依赖查找,已经被抛弃。实现思路大概为将service放在map中,然后从map中通过service名字作为key获取指定的service。
2. Spring 框架中是如何做IOC的
Spring通过控制反转容器管理bean的生命周期,控制bean的依赖注入。Spring的IOC容器避免在各处使用new来创建类,并且统一维护。在你需要一个实例时,由容器提供给你。
Spring IOC 容器工作流如下图所示。
Spring源码分析IOC :
Spring IOC 核心:依赖注入和自动装配
核心接口:BeanFactory 和 ApplicationContext
BeanFactory : 能够管理和装配Bean,获取Bean实例
BeanDefinition: 用于描述Bean的定义
BeanDefinitionRegistry: 提供向ioc容器注册BeanDefinition对象的方法(registerBeanDefinition)。注册到BeanDefinitionMap中(key:String的BeanName value:BeanDefinition)。
ApplicationContext:BeanFactory子接口。面向开发者使用,有更多的功能。继承BeanFactory,也能管理装配Bean。RousorcePatternResolver能够加载资源文件。
3. Spring 有什么缺点
Spring像一个胶水,将框架黏在一起,后面拆分的话就不容易拆分了。
Spring 和Spring MVC的区别
Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。Spring 作为胶水 连接Mybatis 和Spring MVC 构成SSM框架。
早期的SSH框架:Struts2 : Web层框架。Spring : 容器框架。
Hibernate : 持久层框架。
4. Spring Bean 的五种作用域
- singleton:Spring的默认作用域 容器里拥有唯一实例(针对无状态的Bean)
- prototype: 针对每个getBean请求,容器都会创建一个实例(针对有状态的Bean)
web 容器下
3. ruquest:会为每一个Http请求创建一个Bean实例
4. session:会为每个session创建一个Bean实例
5. globalSession:会为每个全局Http Session创建一个Bean实例,该作用域仅对Portlet有效。
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。
5. Spring Bean 的生命周期
由Spring容器来管理的,主要是 创建 ,销毁。
创建:
- 实例化Bean
- BeanFactory 通过createBean 进行实例化一个未初始化的Bean
- 设置对象属性(依赖注入)
- 实例化后的对象被封装在BeanWrapper对象中,并且此时对象仍然是一个原生的状态,并没有进行依赖注入。
- 紧接着,Spring根据BeanDefinition中的信息进行依赖注入。
- 并且通过BeanWrapper提供的设置属性的接口完成依赖注入。
- 注入Aware接口
- Spring会检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给bean。aware接口声明了依赖关系
- BeanPostProcessor
- 当经过上述几个步骤后,bean对象已经被正确构造,但如果你想要对象被使用前再进行一些自定义的处理,就可以通过BeanPostProcessor接口实现。
- InitializingBean与init-method
- 当BeanPostProcessor的前置处理完成后就会进入本阶段。
销毁:
若实现了DisposableBean接口,则会调用destroy方法
若配置了destroy-method属性,则会调用其配置的销毁方法
Spring 的 IOC的更多相关文章
- Spring的IOC和AOP之深剖
今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...
- Spring框架IOC容器和AOP解析
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- Spring总结—— IOC 和 Bean 的总结
一.Spring 官方文档中给出的 Spring 的整体结构. 二.我自己所理解的 Spring 整体结构图. 三.本次总结 Spring 核心部分 1.从上面图中可以看出,Beans 和 Conte ...
- spring的IOC和AOP
spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...
- spring容器IOC创建对象<二>
问题?spring是如何创建对象的?什么时候创建对象?有几种创建方式?测试对象是单例的还是多例的 ?对象的初始化和销毁? 下面的四大模块IOC的内容了!需要深刻理解 SpringIOC定义:把对象的创 ...
- Spring中IoC的入门实例
Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...
- Spring中IOC和AOP的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC就是典型的工厂模式,通过s ...
- Spring的IoC应用
IoC(Inversion of Control,控制反转) Spring的IoC应用是其框架的最大的特点,通过依赖注入可以大大降低代码之间的耦合度,从而实现代码和功能之间的分离.在代码中可以不直接和 ...
- Spring 实践 -IoC
Spring 实践 标签: Java与设计模式 Spring简介 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转) ...
- 挖坟之Spring.NET IOC容器初始化
因查找ht项目中一个久未解决spring内部异常,翻了一段时间源码.以此文总结springIOC,容器初始化过程. 语言背景是C#.网上有一些基于java的spring源码分析文档,大而乱,乱而不全, ...
随机推荐
- vi、wc、gzip、bzip2、tar、yum安装、dpek、用户信息操作等命令
命令模式 输入"dd"即可将这一行删除 按下"p"即可粘贴 插入模式: a:从光标这个位置之后插入 A:在行尾插入 i:从光标之前插入 I:行首插入 o:在光标 ...
- HTTP常见状态码(200、301、302、404、500、502)详解
概述 运维工作中,在应用部署的时候,通常遇到各种HTTP的状态码,我们比较常见的如:200.301.302.404.500.502 等,有必要整理一份常见状态码的文档,加深印象,方便回顾. ...
- 微服务架构Day03-SpringBoot之web开发配置
概述 SpringBoot开发: 1.创建SpringBoot应用,选中需要的场景模块. 2.SpringBoot已经默认将场景模块配置好,只需要在配置文件中指定少量的配置(数据库地址,用户名,密码) ...
- 手把手搭建一套私有 npm 服务
手把手搭建一套私有 npm 服务 gnpm xnpm pnpm lnpm refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- The best Fibonacci is achieved in js
The best Fibonacci is achieved in js the best realized by using js 斐波那契数列 "use strict"; /* ...
- React Hooks: useReducer All In One
React Hooks: useReducer All In One useReducer https://reactjs.org/docs/hooks-reference.html#usereduc ...
- DRM & 音视频 & 防盗链
DRM & 音视频 & 防盗链 DRM Digital Rights Management / 数字版权管理 https://en.wikipedia.org/wiki/Digital ...
- Node.js & module.exports & exports
Node.js & module.exports & exports https://www.cnblogs.com/xgqfrms/p/9493550.html exports &a ...
- Chrome 80 & SameSite & cookie
Chrome 80 & SameSite & cookie chrome://settings/help https://developers.google.com/web/updat ...
- better-scroll使用参考
************better-scroll是基于父元素固定高度,溢出才滚动的,所以父元素务必定高,否则无法滚动***************************************** ...