zoukankan      html  css  js  c++  java
  • SSH深度历险(五) 深入浅出-----IOC AND AOP

     

          IOC就是Inversion of Control,控制反转。在Java开发中。IoC意味着将你设计好的类交给系统(容器)来控制实现。而不是在你的类内部控制。

    这称为控制反转。


    本人理解:就是把原本你自己制造,使用的对象,如今交由别人制造,而通过构造函数(容器来管理),setter方法或方法(这里指使用这个对象的方法)參数的方式传给自己,由自己使用。



    实例说明形象理解IOC


            要设计一个Girl和一个Boy类,当中Girl有recognize方法,即Girl想要recognize一个Boy。那么,我们的问题是,Girl怎样可以认识这个Boy?


            常见的MM与GG的认识方式有下面几种

                      1 青梅竹马; 2 亲友介绍; 3 父母包办           那么哪一种才是最好呢?



    青梅竹马:Girl从小就知道自己的Boy。



    <span style="font-family:Microsoft YaHei;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">代码:
    public class Girl {
        void recognize(){
           Boy boy = new Boy();
        }
    }
    </span></span></span></span>

             然而从開始就创建的Boy缺点就是无法在更换。而且要负责Boy的整个生命周期。假设Girl想要换一个怎么办?

    不足:第1种是通过接口注射,这样的方式要求我们的类必须实现容器给定的一个接口,然后容器会利用这个接口给我们这个类注射它所依赖的类。



    亲友介绍:由中间人负责提供Boy来见面

    <span style="font-family:Microsoft YaHei;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">代码:
    public class Girl {
        void recognize(){
           Boy boy = BoyFactory.createBoy();    
        }
    }
    
    
    亲友介绍。固然是好。假设不惬意。虽然另外换一个好了。

    可是。亲友BoyFactory常常是以Singleton的形式出现,不然就是,存在于 Globals,无处不在。无处不能。

    实在是太繁琐了一点。不够灵活。我为什么一定要这个亲友掺和进来呢?为什么一定要付给她介绍费呢?等等?</span></span></span></span>



    父母包办:一切交给父母。自己不用费吹灰之力,仅仅须要等着recognize就好了。


    <span style="font-size:18px;"><span style="font-family:Microsoft YaHei;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">代码:
    public class Girl {
        void recognize(Boy boy){
           // <span style="font-family:Microsoft YaHei;">recognize</span> boy
          boy.<span style="font-family:Microsoft YaHei;">recognize</span>();
        }
    }</span></span></span></span></span>

            Well,这是对Girl最好的方法,仅仅要想办法贿赂了Girl的父母。并把Boy交给他。那么我们就能够轻松的和Girl来recognize。

    这就是IOC。将对象的创建和获取提取到外部。

    由外部容器提供须要的组件。

     

             我们知道好莱坞原则:“Do not call us, we will call you.” 意思就是,You, girlie, do not call the boy. We will feed you a boy。


           非常easy ,就是本来你该做的事情 你不去做了 让系统去做,比方。你获取一个对象的时候,往往须要new出实例来,假设用了控制反转,那这件事情 就不须要你做了,你仅仅须要在配置文件xml中配置好,系统就帮你new,控制反转也叫依赖注入,就是把该用到的东西 提前注入进去,下次直接用 而不是每次都new

           IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。

    这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器。控制权的转移,是所谓反转。


    实例USB接口样例


           笔记本电脑与外围存储设备通过预先指定的一个接口(USB)相连,对于笔记本而言。 仅仅是将用户指定的数据发送到USB接口,而这些数据何去何从。则由当前接入的USB设备决定。在USB 设备载入之前。笔记本不可能预料用户将在USB接口上接入何种设备。仅仅有USB设备接入之后。这样的设 备之间的依赖关系才開始形成。
           相应上面关于依赖注入机制的描写叙述,在执行时(系统开机,USB 设备载入)由容器(执行在笔记本 中Windows操作系统)将依赖关系(笔记本依赖USB设备进行数据存取)注入到组件中(Windows 文件訪问组件)。



    个人理解:


             传统模式中是类和类之间直接调用。所以有非常强的耦合度,程序之间的依赖关系比較强,后期维护时牵扯的比較多。


    IOC,用配置文件(XML)来描写叙述类与类之间的关系,由容器来管理,减少了程序间的耦合度,程序的改动能够通过简单的配置文件改动来实现


    面向切面编程AOP


            Aspect Oriented Programming(面向切面编程)。能够 通过预编译方式和执行期动态代理实如今不改动源码的情况下给程序动态统一 加入功能的一种技术(再实例学习)。


    总结

           这些概念首次接触。是老师给8期讲课的时候接触到了,不断的积累,查找资料,深入学习,总结。多多的听老师的课。思想有非常大的提升影响着自己的思维方式、做事方式,影响着、蜕变着……


  • 相关阅读:
    C# 装箱原型
    C# 反射浅谈(一)
    javascript介绍(二)
    javascript介绍(一)
    C#中 托管资源和非托管资源
    varchar && nvarchar 闲谈
    高内聚&&低耦合
    【android】移植IOS视图响应陀螺仪交互行为
    【android】如何实现猿题库题目的排版
    开心工作标准的硬件环境
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6689862.html
Copyright © 2011-2022 走看看