1.面向对象回顾和案例

面向对象程序设计:1 2 3 4

案例分析:

需求分析:

报表功能:
     报表服务类,检索数据,并生成图标
     报表生成器类,生成不同格式的报表文件,例如PDF格式、Html格式等

实现一:以面向对象的方式实现Demo
     实现二:分离接口和实现
     优化目标:消除ReportService到ReportGenerator实现类之间的依赖关系

实现三:

采用容器:
      增加容器类:Container类
      所有组件由Container类管理

分析:

ReportService与ReportGenerator的具体实现解耦了

选择不同的Generator不需要修改Service
      缺点:
          Container对所管理的所有组件产生了依赖
          ReportService对Container依赖,因为其封装有查找逻辑,所以在重用之前还要修改
     目标:
         去掉ReportService对Container依赖

实现四:    

使用服务定位器:
     服务定位器:ServiceLocator类
     封装查找逻辑
     对外公开查找组件(Generator)的方法     

优点:
       应用服务定位器将查找逻辑从组件里分离出来
      降低组件在查找方面的复杂性
      增加组件的重用性
      这是用于查找资源的通用设计模式,并不局限于查找组件
         JavaEE中的应用,如:JNDI(Java命名和目录接口)
       局限
          组件需要知道如何查找资源

2.IIoC和DI

概念:  

IoC(Inversion of Control,控制反转):
   设计原则,解耦组件之间的依赖关系

DI( DI(Dependency Injection ,依赖注入):
   具体的设计模式,体现了IoC的设计原则
   因为DI是IoC最典型的实现,所以术语IoC与DI经常被混用

应用IoC:

应用IoC:
     好的获取资源的解决方案
     由容器主动将资源推送到它所管理的组件里,组件要有接受资源的方式
     查找的被动形式

实现五:

不需要服务定位器
    组件(ReportService)增加接受资源的方法(setter)
    由容器将组件(ReportGenerator)注入到另一个组件(ReportService)

优点
     完全面向接口

不同类型的依赖注入:

主要有三种类型的DI
接口注入(Type1 IoC)
setter注入(Type2 IoC)
构造器注入(Type3 IoC)
流行程度最广的:setter注入
有可能忘记注入,会抛出空指针
代码安全有可能存在问题,依赖会被修改
构造器注入
可避免setter注入的一些缺点
没有含义明确的方法名,对参数位置与数量有要求

3.Spring框架简介

4.Spring框架实现IoC

Spring提供了IoC容器
Beans均由Spring IoC容器
来管理和组装

Spring实例编码步骤:

导入Spring相关Jar文件
配置元数据
编码实现功能,组件间用容器进行注入

Spring示例:

Bean是一个由Spring IoC容器进行实例化、装配和管理的对象
Beans以及他们之间的依赖关系是通过容器使用配置元数据反应出来
配置元数据:
基于Xml的配置
基于注解的配置
基于Java的配置

1.Ioc&DI和Spring的更多相关文章

  1. IoC, DI,Spring.net

    IoC : Inversion of Control , 控制反转,就是创建对象(实例)的权利由开发人员自己控制New转到了由容器来控制.实现了解耦. DI: Dependency Injection ...

  2. Spring中的IOC\DI\AOP等概念的简单学习

    IoC(Inversion of Control,控制反转).这是spring的核心,贯穿始终, 所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系.Spr ...

  3. spring 依赖注入(IOC DI)

    依赖注入(IOC DI) 依赖注入的两种方式: 1. set注入 Spring要求使用set注入方式的时候,Bean需要提供一个无参数的构造方法.并提供一个属性的setter方法.例如: packag ...

  4. spring ioc DI 理解

    下面是我从网上找来的一些大牛对spring ioc和DI的理解,希望也能让你对Spring ioc和DI的设计思想有更进一步的认识. 一.分享Iteye的开涛对Ioc的精彩讲解 Ioc—Inversi ...

  5. Spring+IOC(DI)+AOP概念及优缺点

    Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应 ...

  6. Spring Ioc DI 原理

    IOC(DI):其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述的那样晦涩.Java程序员都知道:java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,每个对象在使用 ...

  7. Spring框架-IOC/DI详细学习

    一.IOC/DI概念 参考博客:https://www.cnblogs.com/xdp-gacl/p/4249939.html IOC(inversion of control, 控制反转)是一种设计 ...

  8. Spring 学习教程(二): IOC/DI+AOP

    1. IOC / DI Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员 ...

  9. Spring的IOC/DI使用到的技术

    一.了解Spring IOC/DI 1:Spring有两大核心技术,控制反转(Inversion of Control, IOC)/依赖注入(Dependency Injection,DI)和面向切面 ...

随机推荐

  1. 使用Post进行Http通信

    --------------siwuxie095                             有道翻译官网:http://fanyi.youdao.com/     找到官网页面下方的 有 ...

  2. GUI编程02

    1 编写一个导航栏 from tkinter import * root = Tk() root.title("测试") root.geometry("400x400+4 ...

  3. AdapterPattern(23种设计模式之一)

    设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...

  4. 数字图像处理实验(5):PROJECT 04-01 [Multiple Uses],Two-Dimensional Fast Fourier Transform 标签: 图像处理MATLAB数字图像处理

    实验要求: Objective: To further understand the well-known algorithm Fast Fourier Transform (FFT) and ver ...

  5. Luogu 3627 [APIO2009]抢掠计划

    不爽. 为什么tarjan能爆栈啊 十分显然的缩点,给缩点之后的点连上权值为后一个点集权值的有向边,然后spfa跑最长路. 注意一开始$dis_{st}$应该等于$st$这个集合的权值. 时间复杂度$ ...

  6. Luogu 1979 [NOIP2013] 华容道

    要优先安排历年NOIP题 考虑到要移动,肯定要先把空的格子移动到起点旁边,所以我们对于每一个询问都先bfs一次求出把空格移到起点的四个位置的最短路,而且要保证不能移动起点的方块. 只有空的格子在一个格 ...

  7. python3-字典中包含字典

    # Auther: Aaron Fan #定义字典及内容av_catalog = { "欧美":{ "www.youporn.com": ["很多免费 ...

  8. Opera福利谷歌

    文章介绍 看到这个文章时候,感觉还可以,之前天行也是酱紫的,但是现在不知道怎么的已经完全用不了了.就试了下这个欧鹏,还可以,朋友有不少需要访问谷歌的,就收藏下了. Opera介绍 Opera浏览器,是 ...

  9. 从一个xaml文件获取xaml内容,遍历寻找对象

  10. vue 项目接口管理

    在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,如何定义呢? 方法可能不只一种,本文使用axios+async/await进行接口的统一管理. 本文使用vue-cli ...