IOC(Inversion of Control)即控制反转技术,其基本原理是基于所谓Hollywood模式思想:Don't call me , I'll call you!思想。也就是说,所有的组件都是被动的,所有组件初始化和调用都有容器负责。组件处在容器当中,有容器负责管理。
举一个例子,公司有一台联想的打印机负责公司内部财务数据打印服务。于是建立一个pringService类。
pactage test;
public class printService {
private Printer lenovoPrinter;
public PrintService() {
this.lenvoPrinter = new Printer();
}
public void printInfo(String info) {
this.lenvoPrinter.init(); //初始化打印机
this.lenovoPrinter.print(info); //打印
}
}
这样如果我们需要打印数据,则这样引用打印机服务:
public class FinanceReport() {
public FinancePrport() {}
public void printReport (String info) {
PrintService ps = new PrintService ();
ps.printInfo(info);
}
}
但是,这样的话如果公司业务量增加,于是有购买了一台 HP 打印机。那么为了支持多台打印机的情况,就需要对打印机服务类作改动。
package test;
public class PrintService {
private Printer thePrinter;
public PrintService (Printer thePrinter) {
this.thePrinter = thePrinter;
}
public void printInfo(String info){
this.thePrinter.init();
this.thePrinter.print(info);
}
}
但是这样就导致了原来的FinanceReport不可用,需要改动
在FinanceReport代码中需要在new PrintService ();作出改动已指定打印机类型;但是这里只是一个FinanceReport(财务打印),如果公司有很多类型的数据需要打印,那么就会有很多的和FinanceReport一样的类,那么就需要逐个改动,很是麻烦,而出现这个问题的原因就是FinanceReport类对printService类的耦合太紧,依赖太深。
下面给出解决方案:
package test;
public class FinanceReport {
private PrintService printService;
public FinanceReport(){}
public void printReport(String reportInfo){
printService.printInfo(reportInfo);//打印
}
//需要时动态的设置它
public void setPrintService (PrintService printService){
this.printService = printService;
}
}
上述代码很大的一个改动就是没有直接的: new PrintService();而是需要时在外部动态的设置它,这样就消除了FinceReport类和PrintService类的强耦合;
下面再来分析FinanceReport类,有上面的分析知道我们为了实现解耦,而动态的设置PrintService,但是我们并不知道是如何得到Service实例的,也就是说Service的Dependency(依赖)在那里我们无从知晓,但是我们可以知道Service完全可以满足我们的需求,因为Service是PrintService类型的。那么谁应该具体负责提供Service的Dependency呢?这就是IOC容器的责任了。IoC容器的责任就是负责向应用程序中提供Dependency的。经过上面的改变,获取服务的依赖性的责任就由用户代码转移到容器中了,这就是责任的迁移。结合上面的“Don't call me,I'll call you”的原则,就可以理解。这样做的优点非常多最核心的一条就是大大降低了代码的耦合度。
声明一下上面的例子是来源于清华大学出版社出版的J2EE应用框架设计与项目开发,作者:余浩东
分享到:
相关推荐
通过本篇学习笔记,我们不仅了解了IoC的基本原理,还亲手实现了一个简易的IoC容器。这样的实践有助于我们更深入地理解Spring.NET的工作原理,以及如何利用IoC来提高程序的可维护性和扩展性。希望这篇笔记能够帮助...
在Spring框架中,IOC(Inversion of Control,控制反转)容器是核心组件,它负责管理对象的生命周期,也就是Bean的生命周期。这篇SSH笔记主要探讨了如何在Spring4中利用BeanPostProcessor接口定制Bean的初始化和销毁...
《Spring技术内幕》的系列学习笔记主要围绕Spring的IoC容器展开,这是一个核心概念,因为它负责管理应用中的所有对象,包括它们的创建、配置以及依赖关系的管理。IoC容器的两大主要接口是BeanFactory和...
在本次的Java Spring框架学习笔记中,将对Spring框架的核心概念进行详细解析,包括Spring的 IOC(控制反转)、AOP(面向切面编程)、jdbcTemplate、事务管理、Spring5新特性以及与Mybatis的整合。本学习笔记提供了...
**Spring-IoC 复习笔记** Spring 框架是 Java 开发中不可或缺的一部分,其核心特性之一就是依赖注入(Dependency Injection,简称 DI),也称为控制反转(Inversion of Control,简称 IoC)。IoC 是一种设计模式,...
依赖注入:Dependency Injection IOC的作用:降低程序间的偶合(依赖关系) 依赖关系的管理:以后都交给spring来维护 ... ref:用于指定其他bean类型数据,它所指的是在spring的IOC容器中出现的bean
Spring学习笔记 Spring是Java EE开发中的一个开源框架,提供了一个轻量级的、灵活的、可扩展的解决方案。Spring框架的核心概念是IoC(Inversion of Control),也就是控制反转,使用对象时,不要主动new产生对象,...
本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...
Spring IOC容器是Spring框架的核心,它负责管理和维护对象的生命周期。通过反转控制权,不再由代码直接创建对象,而是由容器负责对象的创建、初始化和装配。这使得代码更加灵活,易于测试和维护。在Spring Boot中,...
IoC容器是Spring框架的核心部分,它的主要功能是管理对象的生命周期和依赖关系。在Spring中,所有的对象都由IoC容器创建、管理和销毁,这有助于降低组件之间的耦合度。 #### 三、IoC容器中的Bean实例化方式 在...
总之,《Spring技术内幕 学习笔记》涵盖了Spring框架的众多核心知识点,从IoC容器、AOP到Web开发和数据访问,对于提升Spring开发技能具有很高的价值。通过深入学习和实践,开发者能够更好地理解和掌握Spring框架,...
空哥编程之JAVA学习笔记从spring的核心概念AOP和IOC容器入手深入学习,快速掌握JAVA编程并明确学习路径文档主要的思路:1、简单介绍AOP的历史,及核心概念2、AOP的核心概念3、IOC容器实现原理,以及bean的管理4、...
在软件开发中,IoC(Inversion of Control,控制反转)是一种设计模式,它将对象的创建和管理责任从代码中剥离出来,交由一个容器来处理。Spring框架是Java平台上的一个核心组件,其核心特性就是依赖注入...
Spring 5 框架学习笔记 本笔记主要介绍了 Spring 5 框架的相关知识点,包括 IoC 原理分析、基于 XML 的 IoC 实现、基于 XML 的 DI 使用、基于注解的 IoC 实现、Spring 纯注解实现方式、Spring 整合 Junit、Spring ...
这份"Spring框架学习笔记"涵盖了Spring框架的基础知识、核心组件以及高级特性,对于初学者来说是一份宝贵的资料。 一、Spring框架概述 Spring框架是为了解决企业应用开发的复杂性而设计的,它提供了一个全面的基础...
2. **Spring**:Spring 框架是企业级应用的核心,提供IOC容器管理和AOP支持。`51-52使用Struts + Spring + Hibernate完成用户登陆笔记.pdf`展示了如何整合Struts和Hibernate,通过Spring管理Bean,实现依赖注入,...
### Java学习笔记2:Spring框架基础 #### 一、Spring框架简介 Spring 是一个开源的轻量级 Java 开发框架,旨在简化企业级应用程序的开发。它提供了许多强大的功能,如依赖注入(Dependency Injection, DI)、面向...
通过这个教程,学习者应该能够掌握如何利用Spring IoC容器来控制对象的生命周期,理解依赖注入的概念,以及如何在实际的Web应用中实现自定义类的实例化和依赖管理。这将帮助他们写出更高质量、更易于维护的代码。
标题和描述均提到了“spring指南学习笔记”,这意味着文档聚焦于Spring框架的学习心得与关键概念。Spring是一个开源的Java企业级应用框架,以其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect ...
Spring 框架的核心特性之一是它的 IoC(Inversion of Control)容器,该容器支持两种主要的接口:`BeanFactory` 和 `ApplicationContext`。其中,`ApplicationContext` 是更高级的容器接口,提供了更多的功能和便利...