• Spring 耦合与内聚


    什么是耦合

      在软件工程中,耦合指的就是就是程序之间的依赖性。

      包括:类之间的依赖,方法之间的依赖。

    什么是内聚

      内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。

      内聚和耦合是密切相关的,同其他模块存在高耦合的模块意味着低内聚,而高内聚的模块意味着该模块同其他模块之间是低耦合。在进行软件设计时,应力争做到高内聚,低耦合。

    解耦

      降低程序之间的依赖关系。

      我们要知道依赖关系是不可能完全消除的,那么我们该降低哪些依赖关系呢?

      实际开发中应该做到:编译期不依赖,运行时才依赖

    解耦的思路

      第一步——使用反射来创建对象,从而避免使用new关键字

      第二步——通过读取配置文件来获取要创建对象的全限定类名

    实例

      这是jdbc的获取连接的两个步骤,我们可以看到注册驱动这里,对com.mysql.jdbc.Driver()类有依赖

      这样的代码同样也能注册驱动,但并不会产生依赖,在这里com.mysql.jdbc.Driver只是一个字符串。

      我们先来看第一种,第一种方法就是实例化Driver类,并通过调用registerDriver()方法完成注册。

      可以看到它是把要注册的驱动程序信息封装到了DriverInfo中,然后放进了一个List中。

       第二种方法是怎么通过只要获得Driver的Class对象就可以完成注册呢,我们来看下Driver的源码

       可以看到它是通过静态代码块实现的,根据类加载机制当执行 Class.forName(driverClass) 获取其Class对象时, com.mysql.jdbc.Driver 就会被JVM加载,连接,并进行初始化,初始化就会执行静态代码块,也就会执行下边这句代码:

       使用第二种方式的好处就是,我们的类不在依赖具体的类,此时就算删除mysql驱动的jar包,依然可以编译(不能运行),同时也产生了另一个问题mysql 驱动的全限定类名字符串是在 java 类中写死的,一旦要改还是要修改源码。

     

  • 相关阅读:
    ng-深度学习-课程笔记-1: 介绍深度学习(Week1)
    java发送http请求和多线程
    Spring Cloud Eureka注册中心(快速搭建)
    Spring boot集成Swagger2,并配置多个扫描路径,添加swagger-ui-layer
    springboot在idea的RunDashboard如何显示出来
    Oracle 中select XX_id_seq.nextval from dual 什么意思呢?
    mysql类似to_char()to_date()函数mysql日期和字符相互转换方法date_f
    MySQL的Limit详解
    HikariCP 个人实例
    NBA-2018骑士季后赛
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/13672488.html
Copyright © 2020-2023  润新知