Exploring
首页
  • Java

    • 面向对象的思想OOP
    • 浅谈Java反射原理
    • endorsed覆盖JDK中的类
  • 认证与授权

    • LDAP概念和原理介绍
    • OAuth2介绍
  • Impala

    • Impala 介绍
  • MySQL

    • 关于MySQL的一些面试题
    • 解决MySQL不到中文数据
    • 数据库之事务与实现原理
  • Oracle

    • oracle的表空间,用户管理,表操作,函数
    • oracle的查询、视图、索引
    • plsql简单入门
  • Redis

    • 数据类型详解
    • 跳越表
    • 数据持久化的两种方式
  • 共识算法

    • gossip
  • RPC

    • GRPC初识与快速入门
    • ProtocolBuffer基本语法
  • RabbitMQ

    • RabbitMQ入门程序之HelloWorld
    • RabbitMQ之工作模式
  • Zookeeper

    • Zookeeper一文入门
  • Docker

    • Docker入门初体验
  • Maven

    • 把自己的包到Maven中央仓库
    • Maven之自定义插件
  • Nginx

    • nginx的安装
    • nginx的配置文件
    • nignx 的变量
  • Tomcat

    • Servlet3通过SPI进行注册组件
  • Vagrant

    • vagrant 初始化
    • vagrant 常用配置
    • vagrant 自己制作 box
  • Linux

    • 启动方式 Systemd
    • 后台服务
    • 防火墙与 Iptables
  • 设计模式

    • 设计模式-代理
    • 设计模式-单例模式
    • 设计模式-迭代器
  • 分布式

    • CAP 理论
  • 数据结构

    • 数据结构之堆Heap
    • 数据结构之哈希表
    • 数据结构之队列
  • 计算机网络

    • HTTP与HTTPS详解
    • 浅谈DNS协议
    • ISP中的网络层
  • 算法

    • 常用查找算法及Java实现
    • 常用排序算法及Java实现
    • 迪杰斯特拉算法
  • 操作系统

    • 操作系统之进程调度算法
    • 操作系统之进程通讯IPC
    • 操作系统之内存管理
  • 抓包

    • 生成安卓系统证书
  • 加解密

    • 常见加密算法
    • 公开秘钥基础知识
    • RSA 解析
  • Windows

    • scoop 包管理
    • windows-terminal 配置
    • 增强 PowerShell
归档
Github (opens new window)
首页
  • Java

    • 面向对象的思想OOP
    • 浅谈Java反射原理
    • endorsed覆盖JDK中的类
  • 认证与授权

    • LDAP概念和原理介绍
    • OAuth2介绍
  • Impala

    • Impala 介绍
  • MySQL

    • 关于MySQL的一些面试题
    • 解决MySQL不到中文数据
    • 数据库之事务与实现原理
  • Oracle

    • oracle的表空间,用户管理,表操作,函数
    • oracle的查询、视图、索引
    • plsql简单入门
  • Redis

    • 数据类型详解
    • 跳越表
    • 数据持久化的两种方式
  • 共识算法

    • gossip
  • RPC

    • GRPC初识与快速入门
    • ProtocolBuffer基本语法
  • RabbitMQ

    • RabbitMQ入门程序之HelloWorld
    • RabbitMQ之工作模式
  • Zookeeper

    • Zookeeper一文入门
  • Docker

    • Docker入门初体验
  • Maven

    • 把自己的包到Maven中央仓库
    • Maven之自定义插件
  • Nginx

    • nginx的安装
    • nginx的配置文件
    • nignx 的变量
  • Tomcat

    • Servlet3通过SPI进行注册组件
  • Vagrant

    • vagrant 初始化
    • vagrant 常用配置
    • vagrant 自己制作 box
  • Linux

    • 启动方式 Systemd
    • 后台服务
    • 防火墙与 Iptables
  • 设计模式

    • 设计模式-代理
    • 设计模式-单例模式
    • 设计模式-迭代器
  • 分布式

    • CAP 理论
  • 数据结构

    • 数据结构之堆Heap
    • 数据结构之哈希表
    • 数据结构之队列
  • 计算机网络

    • HTTP与HTTPS详解
    • 浅谈DNS协议
    • ISP中的网络层
  • 算法

    • 常用查找算法及Java实现
    • 常用排序算法及Java实现
    • 迪杰斯特拉算法
  • 操作系统

    • 操作系统之进程调度算法
    • 操作系统之进程通讯IPC
    • 操作系统之内存管理
  • 抓包

    • 生成安卓系统证书
  • 加解密

    • 常见加密算法
    • 公开秘钥基础知识
    • RSA 解析
  • Windows

    • scoop 包管理
    • windows-terminal 配置
    • 增强 PowerShell
归档
Github (opens new window)
  • Java

    • 基础

    • 并发与多线程

    • 日志系统

    • 单元测试

    • JVM

    • Spring

      • 理解依赖注入与松耦合
        • 耦合
        • 松耦合
        • 依赖注入(DI)
      • Spring-Aop-注解方式食用
      • spring给util类注入bean
      • Spring之Bean的生命周期
      • Spring之Bean的作用域
      • Spring中Profiles的作用及原理浅析
      • SpringBoot中的服务端推送SSE
    • SpringBoot

    • 一些工具

  • 语言
  • Java
  • Spring
unclezs
2020-03-10
0
目录

理解依赖注入与松耦合

# 耦合

耦合就是一个类依赖于其他的类才能完成其功能。 耦合具有两面性,一个方面是难以测试,难以复用和难以理解,另外一个方面是我们却不得不耦合,完全没有耦合的代码几乎啥都干不了。 所以耦合是必须的,但是必须得好好管理可以。

# 松耦合

先来看看耦合的 例子1-1

public class ChiFan{
    private Kuaizi kuaizi;
    ChiFan(){
        this.kuaizi=new kuaizi();
    }
    public void eat(){
        this.kuaizi.eat();
    }
}
1
2
3
4
5
6
7
8
9

吃饭需要用到筷子,所以吃饭之前必须得有个筷子,但是吃饭不一定得用筷子,也可以用叉子等等。 这个时候如果要改成叉子就需要改变代码了,这个时候就体现了耦合性得缺点。

再看看松耦合的 例子1-2

public class ChiFan{
    private Tool tool;
    ChiFan(Tool tool){
        this.tool=tool;
    }
    public void eat(){
        this.tool.eat();
    }
}
1
2
3
4
5
6
7
8
9

这里可以看到我们使用接口Tool来当作参数,要吃饭必须给一个吃饭的工具才行,而这个工具是可以有多种实现,可以用筷子实现也可以用叉子实现,这里也体现了多态性。

# 依赖注入(DI)

依赖注入的思想与传统的做法不同在于

  • 传统做法是每个对象自己管理自己需要的相互协作的对象,如同例子1-1那样,在自己里面直接new一个出来。
  • 依赖注入就是这个对象去请求要一个这样的对象才能完成工作,这个依赖对象可以set方法进来的也可以是构造方法进来的,一般推荐使用构造方法进来,因为你这个对象没了那些依赖对象无法进行工作,所以如果没有这些依赖对象直接不能创建类的实例才是。一句话概括就是依赖注入会将依赖关系的关系自动交给目标对象,而不是是自己去获取依赖。
在 GitHub 编辑此页 (opens new window)
上次更新: 2024/02/25, 12:11:11
Java内存模型JMM
Spring-Aop-注解方式食用

← Java内存模型JMM Spring-Aop-注解方式食用→

Theme by Vdoing | Copyright © 2018-2024 unclezs
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式