这里主要是对于IOC理论提出的一个认识

  1. dao接口

    public interface Fruit {
    String getFruit();
    }
  2. dao接口的实现类

    public class FruitImpl implements Fruit {
    public String getFruit() {
    return "Buy Some fruit";
    }
    }
  3. 服务层接口

    public interface UserService {
    String buyFruit();
    }
  4. 服务层实现类

    public class UserServiceImpl implements UserService{
    Fruit fruit; public UserServiceImpl() {
    fruit = new FruitImpl();
    } public String buyFruit() {
    return fruit.getFruit();
    }
    }
  5. 测试:

    public static void main(String[] args) {
    UserServiceImpl userService = new UserServiceImpl();
    System.out.println(userService.buyFruit());
    }
    //输出:Buy Some fruit
  6. 新需求:

    注:以买水果为例(之前在知乎看到的示例),在service层的实现类中,由程序员选择特定的商品Fruit交给客户,但是这样一来,如果遇到特殊的需求(比如要更换购买的水果,比如香蕉,苹果…),我们需要另外写dao层的接口实现类.

    public class Aplle implements Fruit {
    public String getFruit() {
    return "Buy some Applle";
    }
    }
  7. 控制权反转(IOC):

    同时还要修改service层的实现类,显然这不是一个好的实现方法.让我们做个小小的改变——在服务层的实现类中增加一个set方法,使客户能够主动"挑选水果":

    public static void main(String[] args) {
    UserServiceImpl userService = new UserServiceImpl();
    userService.setFruit(new Apple());
    System.out.println(userService.buyFruit());
    }

注:psvm -> 当前类的main函数

理解:程序主动创建对象,控制权在程序员手上 -> "客户创建对象",程序被动接收对象

好处:程序员不用再去管理对象的创建,系统耦合性大大降低,可以专注与业务层

实现:set方法

根本目的:解耦

本质:控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现 控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)

spring——IOC理论的更多相关文章

  1. Spring学习总结(一)---谈谈对Spring IOC的理解(一:理论知识理解)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  2. Spring IOC/DI- 3 different types

    理论: IOC(Inversion of Control控制反转) DI(依赖注入) (Dependency Injection)   它不是一种技术而是一种思想.当初IOC理论的提出就是为了解决对象 ...

  3. [Spring框架]Spring IOC的原理及详解。

    这里感谢 CSDN 的原博客:http://blog.csdn.net/m13666368773/article/details/7802126 看后  受益匪浅,这里再重温一遍Spring IOC ...

  4. 走进 Spring IOC 的世界

    转载出自:http://blog.csdn.net/m13666368773/article/details/7802126 1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的 ...

  5. 对Spring IoC容器实现的结构分析

    本文的目标:从实现的角度来认识SpringIoC容器. 观察的角度:从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringIoC容器. 本文的风格:首先列出SpringIoC的外部接口及内 ...

  6. 【死磕 Spring】----- IOC 之深入理解 Spring IoC

    在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,本篇为[死磕 Spring]系列博客的第一篇博文,主要 ...

  7. 关于Spring IOC的学习和理解

    面向对象——三层架构(表现层.业务层.持久层) 三层架构:即表现层.业务层.持久层. ① 持久层:采用DAO模式,建立实体类和数据库表映射(ORM映射).也就是哪个类对应哪个表,哪个属性对应哪个列.持 ...

  8. IOC 之深入理解 Spring IoC

    在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,本篇为[死磕 Spring]系列博客的第一篇博文,主要 ...

  9. springmvc 运行原理 Spring ioc的实现原理 Mybatis工作流程 spring AOP实现原理

    SpringMVC的工作原理图: SpringMVC流程 . 用户发送请求至前端控制器DispatcherServlet. . DispatcherServlet收到请求调用HandlerMappin ...

随机推荐

  1. 《Effective Python》笔记——第3章 类与继承

    一.尽量用辅助类来维护程序的状态 如下,用字典存储简单数据 class SimpleGradebook(): def __init__(self): self.__grades = {} def ad ...

  2. IE,FF等浏览器兼容性问题

    _1:改变选中时候的背景色处理: ::selection { color:#fff; background-color: #5CB85C ;} ::-moz-selection { color:#ff ...

  3. VBA如何实现筛选条件之“排除某些值”

    小爬一般习惯使用Python来解决爬虫和某些办公自动化场景问题,不过最近却需要实现一个VBA需求:从一堆人员处理的Excel数据记录中,排除某些"用户名称"处理的数据.整个思考过程 ...

  4. numpy 知识汇总

    1.增加维度 高纬度打印出来很不好观察,所以打印出来shape更加容易理解维度的增加, 此外一维向量a=np.array([1,2,3]), a[:,None],相当于变为二维并转置了shape=(3 ...

  5. Maven获取resources的文件路径、读取resources的文件

    路径问题一切要看编译后的文件路径 比如,源文件路径是: 而编译后的文件路径为: 也就是说,resources文件夹下的文件在编译后,都是为根目录,这种情况下,比如我要读取resources 文件夹下的 ...

  6. nodejs串行无关联

    var async = require('async'); //串行无关联async.series({ one:function(cb) { setTimeout(function(){ consol ...

  7. 初探Matrix Android ApkChecker

    背景 因为我所在的项目是做投放包,对安卓包的大小很敏感,经常会优化包的大小,所以想引入工具静态检测包大小,看能不能找到其中可以优化的地方,防患于未然.Matrix是微信终端自研和正在使用的一套APM( ...

  8. 04 前端之BOM与DOM

    目录 前端之BOM与DOM BOM与DOM操作 BOM操作 前端之BOM与DOM BOM与DOM操作 BOM 浏览器对象模型>>>:使用js操作浏览器 DOM 文档对象模型>& ...

  9. 理解Faster R-CNN

    首先放R-CNN的原理图 显然R-CNN的整过过程大致上划分为四步: 1.输入图片 2.生成候选窗口 3.对局部窗口进行特征提取(CNN) 4.分类(Classify regions) 而R-CNN的 ...

  10. Solution -「JOISC 2021」古老的机器

    \(\mathcal{Description}\)   Link.   这是一道通信题.   对于长度为一个 \(n\),仅包含字符 X, Y, Z 的字符串 \(s\),将其中 \(n\) 个字符按 ...