Spring 控制反转容器(Inversion of Control – IOC)
系列教程
- Spring 框架介绍
- Spring 框架模块
- Spring开发环境搭建(Eclipse)
- 创建一个简单的Spring应用
- Spring 控制反转容器(Inversion of Control – IOC)
- 理解依赖注入(DI – Dependency Injection)
- Bean XML 配置(1)- 通过XML配置加载Bean
- Bean XML 配置(2)- Bean作用域与生命周期回调方法配置
- Bean XML 配置(3)- 依赖注入配置
- Bean XML 配置(4)- 自动装配
- Bean 注解(Annotation)配置(1)- 通过注解加载Bean
- Bean 注解(Annotation)配置(2)- Bean作用域与生命周期回调方法配置
- Bean 注解(Annotation)配置(3)- 依赖注入配置
- Bean Java配置
- Spring 面向切面编程(AOP)
- Spring 事件(1)- 内置事件
- Spring 事件(2)- 自定义事件
IoC(Inversion of Control )代表控制反转,Spring框架本质上是一个IoC容器。
什么是控制反转?
Java程序中,Java类是基本的代码组织单位。当某个类要使用另一个类时,自然的做法是创建另一个类的对象,然后调用该对象的方法。这样做在程序规模较小时没什么问题,但当程序规模很大时这些类之间过于紧密的耦合会导致后续开发维护困难。例如要替换其中某个类,就不得不修改所有涉及这个类的代码。
控制反转(Inversion of Control / IoC)与依赖注入(Dependency Injection / DI)就是为解决这个问题。上面提到类里面创建另外一个类实例会造成耦合太紧,Spring框架就把创建类实例的行为从类中拿出来放到Spring框架里去做,类与类之间创建关系就没有了。
本来由类控制其所依赖的另一个类的实例创建,现在把创建动作放到Spring框架里了,由框架控制所有类的实例创建,这就是“控制反转”。
框架创建了类所依赖的对象,然后把这些对象传给(注入)类,这就是“依赖注入”。
所以可以看到,Spring框架中控制反转(Inversion of Control / IoC)与依赖注入(Dependency Injection / DI)实际上讲的是同一个事情,只是角度不同。
IoC容器执行的主要任务:
- 创建bean实例
- 根据配置文件装配bean
- 为bean设置初始化参数
- 管理bean的生命周期
什么是Bean?
Bean是Java中基本的代码重用单位,是遵守一定约定的Java类。
在Spring中,Bean就是普通的Java类,由Spring IoC容器实例化、组装、管理。
IoC容器根据XML文件、Java注释或Java config文件中的配置信息创建、装配、管理bean(普通Java类),spring应用只需声明一下所需的类(往往是父类,以便达到松耦合的目的)就可直接使用这些bean的功能。如图所示:
IoC容器有两种类型:
- BeanFactory
- ApplicationContext
ApplicationContext
接口基于BeanFactory
接口,比BeanFactory
接口更强大,推荐使用ApplicationContext
。后面会有详细介绍。
Bean的配置方式
Bean的配置信息里包含了:
- 如何创建bean
- bean的生命周期回调方法配置
- bean的依赖关系
Spring容器利用这些信息装配Bean。
bean配置方式有3种:
- XML配置 - 使用XML文件来配置bean
- 注解配置 - 使用
@Service
或@Component
注解配置bean - Java配置 - 从Spring 3.0开始,可以使用java程序配置bean,java配置用到的主要注解是:
@Configuration
、@ComponentScan
和@Bean
后续将会详细介绍。
Spring 控制反转容器(Inversion of Control – IOC)的更多相关文章
- Sring控制反转(Inversion of Control,Ioc)也被称为依赖注入(Dependency Injection,DI)原理用反射和代理实现
首先我有一个数据访问层接口: public interface StudentDao { void save(Student stu); } 和实现类: 1.mysql实现类 public class ...
- IOC 控制反转(Inversion of Control,英文缩写为IoC)
在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 在这样的齿轮组中,因为是协同工作,如果有一个齿轮出了问题,就可能会影响到整个齿 ...
- 控制反转(Inversion of Control,英文缩写为IoC),另外一个名字叫做依赖注入(Dependency Injection,简称DI)
控制反转(Inversion of Control,英文缩写为IoC),另外一个名字叫做依赖注入(Dependency Injection,简称DI),是一个重要的面向对象编程的法则来削减计算机程序的 ...
- 控制反转(Inversion of Control)之我的理解
关于控制反转(Inversion of Control),在具体实现上也有许多其它的叫法,如依赖倒置(Dependency Inversion Principles, DIP).依赖注入(Depend ...
- Spring控制反转容器的使用例子
详细代码如下: spring-config.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...
- 控制反转Inversion of Control (IoC) 与 依赖注入Dependency Injection (DI)
控制反转和依赖注入 控制反转和依赖注入是两个密不可分的方法用来分离你应用程序中的依赖性.控制反转Inversion of Control (IoC) 意味着一个对象不会新创建一个对象并依赖着它来完成工 ...
- Spring 控制反转
Spring 控制反转 具体内容 Spring 开发框架之中有几个概念DI&IOC.AOP.那么要想理解Spring就必须首先理解控制反转的核心意义是什么? 对于IOC来讲如果直接进行文字的描 ...
- Spring控制反转与依赖注入(IOC、DI)
IOC: 反转控制 Inverse Of Control DI:依赖注入 Dependency Injection 目的:完成程序的解耦合 解释:在应用系统的开发过程中,有spring负责对象的创 ...
- Spring控制反转(IOC)和依赖注入(DI),再记不住就去出家!
每次看完spring的东西感觉都理解了,但是过了一段时间就忘,可能是不常用吧,也是没理解好,这次记下来. 拿ssh框架中的action,service,dao这三层举例: 控制反转:完成一个更新用户信 ...
随机推荐
- SSH Secure Shell 编码设置-----支持中文
参考:https://www.cnblogs.com/hupf/p/6920323.html #vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB1803 ...
- 彻底搞懂 JS 中 this 机制
彻底搞懂 JS 中 this 机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 目录 this 是什么 this 的四种绑定规 ...
- CodeBlocks_OpenGL配置
CodeBlocks版本:13.12 下载OpenGL配置文件 1.glut.dll glut32.dll放入系统盘Windows\System32文件夹 2.glut.h放入CodeBlocks安装 ...
- 微信二次分享的JSSDK的调用
网页端微信的二次分享如果不调用分享的SDK,分享之后就不会带有标题.描述 .缩略图 微信分享SDK调用 引入 <script src="//res.wx.qq.com/open/js/ ...
- quartz spring 实现动态定时任务
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间.频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quar ...
- luogu P2765 魔术球问题
题目中没有说球的上限是多少,只告诉了柱子,那么我们就应该以柱子为界去增加球,考虑将每两个能组成完全平方数的点连边,就形成了一个DAG(有向无环图),由于是DAG,可以转换为最小覆盖问题,即最多有n条路 ...
- c++中比较好用的“黑科技”
切入正题,上黑科技 一.黑科技函数(常用的我就不写了,例如sort函数) 1.next_permutation(a+1,a+1+n) a[1-n]全排列 2.reverse(a+1,a+1+n) 将a ...
- docker幕布笔记
幕布链接>>>>https://mubu.com/doc/l_KDT3S5w0
- Ayoub's function
思维,就是反过来想,题解太强了 #include <bits/stdc++.h> using namespace std; int main() { long long t; cin> ...
- POJ 3579:Median 差值的中位数
Median Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4680 Accepted: 1452 Descriptio ...