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. Tensorflow fetch和feed

    import tensorflow as tf #Fetch input1 = tf.constant(1.0)input2 = tf.constant(3.0)input3 = tf.constan ...

  2. ROS Learning-002 beginner_Tutorials 如何添加ROS环境变量 和 如何更新ROS源代码

    ROS Indigo beginner_Tutorials 之 添加环境变量 和 更新ROS源代码的命令 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubu ...

  3. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-002插入排序法(Insertion sort)

    一.介绍 1.时间和空间复杂度 运行过程 2.特点: (1)对于已排序或接近排好的数据,速度很快 (2)对于部分排好序的输入,速度快 二.代码 package algorithms.elementar ...

  4. spark sql使用sequoiadb作为数据源

    目前没有实现,理一下思路,有3中途径: 1:spark core可以使用sequoiadb最为数据源,那么是否spark sql可以直接操作sequoiadb. 2: spark sql支持Hive, ...

  5. [译]Javasctipt中的substring

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  6. Java代码执行机制

    一.java源码编译机制 一个java文件编译为.class文件的流程图. Parse an Enter阶段: Parse:将代码字符串转换为token序列(com.sun.tools.javac.p ...

  7. pthread中如何追踪stack over flow

    通常在程序挂掉的时候我们会catch 他们挂掉的signal,然后在signal中打印出当时的一个stack,来方便问题调查, 但是在stack overflow的情况发生时,会没有拿到stack.s ...

  8. WPF之MVVM模式(2)

    我们都想追求完美 Every view in the app has an empty codebehind file, except for the standard boilerplate cod ...

  9. SQL Server之XML PATH()

    )='SYS20130228000000012'; SELECT ',' + MedicineTypeID FROM Dic_Res_StoreToType b WHERE b.MedicalInst ...

  10. javascript jquery封装对象时的错误,求解!我想知道为什么

    jquery   封装对象时的错误 --------------------------------------------<input id="name" name=&qu ...