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源码分析文档,大而乱,乱而不全, ...
随机推荐
- WPF Animation For SizeChanged Of UIElement
效果图 学到一个新词: Show me the money 背景 这几天查资料,看到 CodeProject 上面的一篇 Post <Advanced Custom TreeView Layou ...
- hutool学习总结
1. 为什么要学习Hutool的使用 Hutool官网 中文写的已经很清楚了 Hutool是一款强力的工具类.封装了工作开发中一些常见的功能操作.避免重复造轮子,使用它大大提高的开发效率. 2. Hu ...
- HTTP常见状态码(200、301、302、404、500、502)详解
概述 运维工作中,在应用部署的时候,通常遇到各种HTTP的状态码,我们比较常见的如:200.301.302.404.500.502 等,有必要整理一份常见状态码的文档,加深印象,方便回顾. ...
- CS144学习(1)Lab 0: networking warmup
CS144的实验就是要实现一个用户态TCP协议,对于提升C++的水平以及更加深入学习计算机网络还是有很大帮助的. 第一个Lab是环境配置和热身,环境按照文档里的配置就行了,前面两个小实验就是按照步骤来 ...
- POJ3233 构造子矩阵+矩阵快速幂
题意:给你矩阵A,求S=A+A^1+A^2+...+A^n sol:直接把每一项解出来显然是不行的,也没必要. 我们可以YY一个矩阵: 其中1表示单位矩阵 然后容易得到: 可以看出这个分块矩阵的左下角 ...
- JVM升华篇
01 Garbage Collect(垃圾回收) 1.1 如何确定一个对象是垃圾? 要想进行垃圾回收,得先知道什么样的对象是垃圾. 1.1.1 引用计数法 对于某个对象而言,只要应用程序中持有该对象的 ...
- 记一次FreeRTOS错误配置导致无法进入临界区
最近项目用到FreeRTOS,在实际调试中发现我自己的一段代码本来好用的(在无RTOS的情况下),但是当我在带RTOS的情况下把代码放到一个单独的任务中运行时我发现本来好用的代码莫名其妙的出现问题,有 ...
- LaTex公式在线转图片
Reference https://latex.codecogs.com/gif.latex?THE_FORMULAR 注: 请不要包含空格 或者 将整段url放到浏览器里, 会产生空格等字符的替换, ...
- Loss_Function_of_Linear_Classifier_and_Optimization
Loss_Function_of_Linear_Classifier_and_Optimization Multiclass SVM Loss: Given an example(xi, yi& ...
- pub package all in one
pub package all in one best practice The pubspec file https://dart.dev/tools/pub/pubspec demo name: ...