【小知识】小例子说明Spring的核心思想之一:控制反转。

装饰设计模式:使用频率很高!!!

  目的:改写已存在的类的某个方法或某些方法,使方法增强了。装饰设计模式(也即包装设计模式)
  口诀:

    1、编写一个类,实现与被包装类相同的接口。(这样他们就具备了相同的行为
    2、定义一个被包装类类型的变量,即引用,用于接收被包装的对象。
    3、定义构造方法,把被包装类的对象注入,给被包装类变量赋值。(因为后面我要用该包装类的对象,所以要注入进来
    4、对于需要改写的方法,写自己的代码。(若重写方法的时候,还需要用到其他类的对象,那我们就在构造方法中继续注入即可)
    5、对于不需要改写的方法,使用被包装类对象调用原有的方法。

  示例代码如下:

// 注意:该类本身就是一个装饰类,对原类的具体装饰饰在该类中实现。(但是需要写很多多余的代码)public class MyConnection implements java.sql.Connection { // 1、编写一个类,实现与被包装类相同的接口。(具备相同的行为)

    // 2、定义一个被包装类类型的变量,即引用,用于接收被包装的对象。    private java.sql.Connection conn; // 同时也是要注入的东西

    // 定义我们缺的池子    private List<Connection> pool; // 这是我们缺的池子

    // 3、定义构造方法,把被包装类的对象注入,给被包装类变量赋值。也把我们需要的池子给注入。    // 注入的对象可以是com.mysql.jdbc.Connection,也可以是com.oracle.jdbc.Connection,即不同的控制权    public MyConnection(com.mysql.jdbc.Connection conn, List<Connection> pool) { // 对被包装的对象和池子进行构造初始化        this.conn = conn;        this.pool = pool;    }

    // 4、对于需要改写的方法,写自己的代码。    @Override    public void close() throws SQLException {        pool.addLast(conn); // 还回数据库连接池中,但是呢我们缺少池子,那么我们就要注入一个池子(依赖注入)    }

    // 5、对于不需要改写的方法,使用被包装类对象调用原有的方法。注意:不需要改写代码有很多啊!省略了。    @Override // 以下有很多,比如:    public void submit() {        conn.submit(); // conn就是我们注入的对象    }

    @Override    public PreparedStatement prepareStatement(String sql) throws SQLException {        return conn.preparedStatement(sql); // conn就是我们注入的对象    }

    @Override    // ......}

  上面的例子有一个Spring的核心思想:控制反转。作用:降低耦合。
    实现方式一:使用依赖注入。(很常用)什么是依赖注入呢?答:就是缺什么传什么。上面的例子中,开始的控制权在接口,后来你注入的是什么,控制权就是谁了。即控制反转,控制权发生了转移。
    实现方式二:使用依赖查找。(不常用)

默认适配器模式:是装饰设计模式的一个变体(针对上面不好的地方进行改进)

  目的:由于不需要改写代码有很多,而需要改写的代码虽然很少,但是老是在改动,这样代码的可维护性差、健壮性不好,好的代码就是:不是总要修改的代码放在一起,只写一次就行,而把需要经常修改的代码放在一起,你想改就改。

  口诀:

    1、编写一个类,实现与被包装类相同的接口。(这样他们就具备了相同的行为
    2、定义一个被包装类类型的变量,即引用,用于接收被包装的对象。
    3、定义构造方法,把被包装类的对象注入,给被包装类变量赋值。(因为后面我要用该包装类的对象,所以要注入进来
    4、对于不需要改写的方法,使用包装类对象调用原有的方法。

示例代码如下:

  包装适配器类代码:

// 该类本身也是一个装饰类,只是对原类没有任何装饰而已,具体的装饰在具体的装饰实现类中。(即对原类没有任何改变。)public class MyConnectionWarper implements Connection {

    private Connection conn;

    public MyConnectionWarper(Connection conn) {        this.conn = conn;    }

    @Override    public <T> T unwrap(Class<T> iface) throws SQLException {        return conn.unwrap(iface);    }

    @Override    public boolean isWrapperFor(Class<?> iface) throws SQLException {        return conn.isWrapperFor(iface);    }

    @Override    public Statement createStatement() throws SQLException {        return conn.createStatement();    }

    @Override  //......}

  包装适配器实现类代码:

public class MyConnection extends MyConnectionWarper {

    private Connection conn;    private LinkedList<Connection> pool;

    public MyConnection(Connection conn, LinkedList<Connection> pool) {        super(conn);        this.conn = conn;        this.pool = pool;    }

    @Override    public void close() throws SQLException {        pool.addLast(conn);    }}

参考链接:https://www.cnblogs.com/chenmingjun/p/9027118.html

原文地址:https://www.cnblogs.com/chenmingjun/p/9262576.html

时间: 2024-10-13 12:41:27

【小知识】小例子说明Spring的核心思想之一:控制反转。的相关文章

Spring学习之==&gt;IOC【控制反转】

一.概述 Spring的三大核心思想:IoC(控制反转),DI(依赖注入),AOP(面向切面编程).本问讲着重介绍一下控制反转. 何谓控制反转:Spring 通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它. 通俗的讲,控制权由代码中转到了外部容器,控制权的转移,就是所谓反转.也

Spring核心(ioc控制反转)

 IoC,Inversion Of Control 即控制反转,由容器来管理业务对象之间的依赖关系,而非传统方式中的由代码来管理. 其本质,即将控制权由应用程序代码转到了外部容器,控制权的转移就是所谓的反转,其带来的最大的好处是降低了业务对象之间的依赖程度,即实现了解耦. Spring的IoC容器主要使用DI(Dependency Injection,依赖注入)方式实现的.不需要主动查找,对象的查找.定位和创建全部由容器管理,容器会将符合依赖关系的对象通过属性(setter等)或者构造函数传

spring 依赖注入(DI)与控制反转(IOC)

Spring目前所拥有的功能非常多,常用的DI和MVC已经是开发中的家常便饭,而且使用Spring来管理其它的框架也是习以为常的事情.Spring在项目中的最大作用就是为了解耦,降低项目整体的耦合度,尽可能做到低耦合.Spring的核心就是IOC和AOP.IOC控制反转创建bean对象,通过DI依赖注入来完成bean对象的数据封装. IOC是一种开发思想,DI是一种开发实现 虽然业界经常提到什么IOC,什么DI,其实都是一个意思,只是IOC是Spring提出的设计开发思想,而DI是代码实现方式.

spring三大核心学习(一)---控制反转

记得当年大学时候,java的企业级框架还是ssh的天下(spring,struts和hibernate),但是现在,感觉spring已经完全把那两个框架甩在后边了.用spring的人越来越多,用struts的人比原来少多了,用hibernate的就更少了.毕竟现在it人才流动性太大了,招人上来上手很重要,谁知道他什么时候就跑了..(hibernate太复杂了). 我最近只看spring,所以只说spring. 记得当初面试的时候被问到过spring的三大核心思想.相信多数javaer都被问到过这

详解Spring框架的核心思想之IOC

微信号:GitShare微信公众号:爱折腾的稻草如有问题或建议,请在公众号留言[1] 前续 为帮助广大SpringBoot用户达到"知其然,更需知其所以然"的境界,作者将通过SpringBoot系列文章全方位对SpringBoot2.0.0.RELEASE版本深入分解剖析,让您深刻的理解其内部工作原理. No.1 Spring是什么 为了让更多的朋友了解Spring,首先科普一下Spring!有兴趣的朋友可以去Spring官网逛逛,地址是:https://spring.io/ The

Spring核心思想之IOC总结

说到Spring的核心思想Ioc和aop不是Spring提出来的,在Spring之前就已经存在,只不过更偏向理论化,Spring在技术层次把两个思想做了非常好的实现(java) 第一部分:什么是IOCIOC Inversion of Control (控制反转/反转控制),注意它是?个技术思想,不是?个技术实现描述的事情:Java开发领域对象的创建,管理的问题传统开发?式:?如类A依赖于类B,往往会在类A中new?个B的对象 IoC思想下开发?式:我们不???去new对象了,?是由IoC容器(S

SSH学习八 Spring框架 -- 控制反转实现Ioc

Spring的核心是控制反转(IoC)和面向切面(AOP)控制反转--Spring通过一种称作控制反转(IoC)的技术促进了低耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JNDI相反--不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它. (以上来自百度百科 http://baike.baidu.com/link?url=_egsZcZDKcHvLJtDqFTZIR3e6lH1G-p

spring学习总结一----控制反转与依赖注入

spring作为java EE中使用最为广泛的框架,它的设计体现了很多设计模式中经典的原则和思想,所以,该框架的各种实现方法非常值得我们去研究,下面先对spring中最为重要的思想之一----控制反转(依赖注入)进行简单的总结. 一.控制反转与依赖注入的概念 在学习spring框架的时候,我们习惯性地将控制反转和依赖注入放在一起,其实,两者体现的思想原则都是差不多的,只不过控制反转是一种更广泛的程序操作理念,而依赖注入是一种更为具体的实现方法,总的来说,控制反转可以依靠依赖注入来实现. 1.控制

Spring 框架学习—控制反转(IOC)

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架,主要用于降低模块之间耦合度的框 架,实际上Spring除了能够通过IoC降低模块之间的耦合度外还提供了其它功能. 1.IoC的基础知识以及原理: IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终 实现