`
AquariusM
  • 浏览: 146490 次
  • 性别: Icon_minigender_1
  • 来自: 南阳
社区版块
存档分类
最新评论

IOC容器学习笔记

阅读更多
      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应用框架设计与项目开发,作者:余浩东
分享到:
评论

相关推荐

    Spring.NET学习笔记-实现一个简易的IoC框架

    通过本篇学习笔记,我们不仅了解了IoC的基本原理,还亲手实现了一个简易的IoC容器。这样的实践有助于我们更深入地理解Spring.NET的工作原理,以及如何利用IoC来提高程序的可维护性和扩展性。希望这篇笔记能够帮助...

    SSH笔记-IOC容器中 Bean 的生命周期

    在Spring框架中,IOC(Inversion of Control,控制反转)容器是核心组件,它负责管理对象的生命周期,也就是Bean的生命周期。这篇SSH笔记主要探讨了如何在Spring4中利用BeanPostProcessor接口定制Bean的初始化和销毁...

    Spring技术内幕学习笔记.docx

    《Spring技术内幕》的系列学习笔记主要围绕Spring的IoC容器展开,这是一个核心概念,因为它负责管理应用中的所有对象,包括它们的创建、配置以及依赖关系的管理。IoC容器的两大主要接口是BeanFactory和...

    Java Spring框架学习笔记(内附源码).pdf

    在本次的Java Spring框架学习笔记中,将对Spring框架的核心概念进行详细解析,包括Spring的 IOC(控制反转)、AOP(面向切面编程)、jdbcTemplate、事务管理、Spring5新特性以及与Mybatis的整合。本学习笔记提供了...

    Spring-IoC 复习笔记.rar

    **Spring-IoC 复习笔记** Spring 框架是 Java 开发中不可或缺的一部分,其核心特性之一就是依赖注入(Dependency Injection,简称 DI),也称为控制反转(Inversion of Control,简称 IoC)。IoC 是一种设计模式,...

    Spring_IoC入门笔记.md

    依赖注入:Dependency Injection IOC的作用:降低程序间的偶合(依赖关系) 依赖关系的管理:以后都交给spring来维护 ... ref:用于指定其他bean类型数据,它所指的是在spring的IOC容器中出现的bean

    Spring学习笔记,参考尚硅谷和黑马课程而作

    Spring学习笔记 Spring是Java EE开发中的一个开源框架,提供了一个轻量级的、灵活的、可扩展的解决方案。Spring框架的核心概念是IoC(Inversion of Control),也就是控制反转,使用对象时,不要主动new产生对象,...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    spring ioc aop mvc boot-学习笔记.docx

    Spring IOC容器是Spring框架的核心,它负责管理和维护对象的生命周期。通过反转控制权,不再由代码直接创建对象,而是由容器负责对象的创建、初始化和装配。这使得代码更加灵活,易于测试和维护。在Spring Boot中,...

    Spring自学笔记-Ioc(控制反转)容器

    IoC容器是Spring框架的核心部分,它的主要功能是管理对象的生命周期和依赖关系。在Spring中,所有的对象都由IoC容器创建、管理和销毁,这有助于降低组件之间的耦合度。 #### 三、IoC容器中的Bean实例化方式 在...

    Spring技术内幕 学习笔记

    总之,《Spring技术内幕 学习笔记》涵盖了Spring框架的众多核心知识点,从IoC容器、AOP到Web开发和数据访问,对于提升Spring开发技能具有很高的价值。通过深入学习和实践,开发者能够更好地理解和掌握Spring框架,...

    空哥编程之JAVA学习笔记

    空哥编程之JAVA学习笔记从spring的核心概念AOP和IOC容器入手深入学习,快速掌握JAVA编程并明确学习路径文档主要的思路:1、简单介绍AOP的历史,及核心概念2、AOP的核心概念3、IOC容器实现原理,以及bean的管理4、...

    学习Spring笔记_IoC(控制反转)简介

    在软件开发中,IoC(Inversion of Control,控制反转)是一种设计模式,它将对象的创建和管理责任从代码中剥离出来,交由一个容器来处理。Spring框架是Java平台上的一个核心组件,其核心特性就是依赖注入...

    spring5框架学习笔记

    Spring 5 框架学习笔记 本笔记主要介绍了 Spring 5 框架的相关知识点,包括 IoC 原理分析、基于 XML 的 IoC 实现、基于 XML 的 DI 使用、基于注解的 IoC 实现、Spring 纯注解实现方式、Spring 整合 Junit、Spring ...

    Spring框架学习笔记

    这份"Spring框架学习笔记"涵盖了Spring框架的基础知识、核心组件以及高级特性,对于初学者来说是一份宝贵的资料。 一、Spring框架概述 Spring框架是为了解决企业应用开发的复杂性而设计的,它提供了一个全面的基础...

    java SSH框架架构学习_笔记.struts,spring,hibernate. IOC,AOP,JDBC,编写个留言管理系统网站

    2. **Spring**:Spring 框架是企业级应用的核心,提供IOC容器管理和AOP支持。`51-52使用Struts + Spring + Hibernate完成用户登陆笔记.pdf`展示了如何整合Struts和Hibernate,通过Spring管理Bean,实现依赖注入,...

    java学习笔记2

    ### Java学习笔记2:Spring框架基础 #### 一、Spring框架简介 Spring 是一个开源的轻量级 Java 开发框架,旨在简化企业级应用程序的开发。它提供了许多强大的功能,如依赖注入(Dependency Injection, DI)、面向...

    21-04-11_IOCDefaultDIPattern(001_通过默认ICO容器和自定义实现类的实例化操作_Web).rar

    通过这个教程,学习者应该能够掌握如何利用Spring IoC容器来控制对象的生命周期,理解依赖注入的概念,以及如何在实际的Web应用中实现自定义类的实例化和依赖管理。这将帮助他们写出更高质量、更易于维护的代码。

    spring指南学习笔记

    标题和描述均提到了“spring指南学习笔记”,这意味着文档聚焦于Spring框架的学习心得与关键概念。Spring是一个开源的Java企业级应用框架,以其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect ...

    spring学习笔记

    Spring 框架的核心特性之一是它的 IoC(Inversion of Control)容器,该容器支持两种主要的接口:`BeanFactory` 和 `ApplicationContext`。其中,`ApplicationContext` 是更高级的容器接口,提供了更多的功能和便利...

Global site tag (gtag.js) - Google Analytics