这篇文章的内容和 Spring 没什么关系,但还是分类到 Spring 学习了。

首先,我们来将一个故事。

很久很久以前,冷兵器时代,人们用弓和箭打仗。

版本1

public class BowAndArrow {public void killEnemy(){System.out.println("Kill enemy with bow and arrow.");}}
public class Person {public void killEnemy() {BowAndArrow bowAndArrow = new BowAndArrow();bowAndArrow.killEnemy();}}
 public static void main(String[] args) {Person person = new Person();person.killEnemy();}

很简单的代码。
如果这段代码出现了 bug,问题会出在哪里?

好吧,这只是段很简单的代码,很容易找出问题所在。
但如果代码复杂的话,问题就不容易解决了。

版本2

public interface Weapon {public void killEnemy();
}
public class BowAndArrow implements Weapon{public void killEnemy(){System.out.println("Kill enemy with bow and arrow.");}}
public class Person {public void killEnemy() {Weapon weapon = new BowAndArrow();weapon.killEnemy();}}

我们用一个接口,抽象出了武器。

这下,Person 类通过 Weapon 接口已经把责任推的一干二净,
接口怎么可能出错,出现 bug 一定是实现类的问题。

这就是接口的作用,明确边界。

版本3

public class Person {private Weapon weapon;public Person(Weapon weapon) {this.weapon = weapon;}public void killEnemy() {weapon.killEnemy();}}
  public static void main(String[] args) {Person person = new Person(new BowAndArrow());person.killEnemy();}

我们发现,每次击杀敌人都要创建新的武器,这在使用上有点繁复。

于是,我们改进了 Person 类。
人要打倒敌人,是离不开武器的,武器成为了人的必要属性。
并且,没有在构造函数内部指定好武器的实现,因为冷兵器时代总会过去。

依赖注入

Spring 好在哪?

依赖注入。
什么是依赖注入?
人杀敌必须要武器,武器就是依赖。
武器的实现不定,可以使弓和箭,也可以是火炮,
从外部传入,这就是注入。

耦合

什么是耦合?
人离不开武器,这就是耦合。
如果完全没耦合,代码会很糟糕。
耦合过深也不好。
没有很好的拓展性,假如武器更新换代,替换武器就会变得麻烦。
边界不明确,出了问题不知道找谁,无法做到独立测试。

单元测试

只有边界清晰了,单元测试才会可行。
利用 Spring 依赖注入,代码边界会更清晰。
各个功能模块各司其职,便于测试,便于复用。

Spring 学习记录 冷兵器时代的故事相关推荐

  1. 中国史上战斗力最强的5支部队(冷兵器时代)

    5.岳家军 北宋末年,北宋最害怕的对手契丹人流传这么一句话:女真人不满万,满万则天下无敌.最后女真人统一了,重挫契丹人,积弱的宋人依然被契丹人羞辱,女真人南下的野心被激发了,他们一路打过了淮河,但是他 ...

  2. 水浒传剧情不错,“冷兵器时代”拼杀场面显整齐

    这里的拼杀跟<斯巴达克斯>比起来真显得太整齐了. 斯巴达克斯几乎演绎了十分另类的拼杀镜头,血腥,残暴,基本角斗士的尸体都是四分五裂的. 水浒:无论砍在哪里都吐血,难道这番茄酱汁儿做得很真实 ...

  3. 中国冷兵器时代的十大勇将

    中国冷兵器时代的十大勇将 在冷兵器时代,两军交战都是肉搏上阵,因此涌现了不少以英勇著称的斗将,武将的个人战斗力虽然没有小说中写的那么夸张,一般也不是左右战局的关键,但还是非常重要的,不是有句俗话这么说 ...

  4. 我的Spring学习记录(二)

    本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...

  5. 大数据:冷兵器时代到热兵器时代的变革

    文章讲的是大数据:冷兵器时代到热兵器时代的变革,世界著名的未来学家John Naisbitt认为"我们首次拥有一个基于关键资源(信息)的经济体制,不仅是可再生的而且是自发生产的.耗尽它没关系 ...

  6. 攻防不对称:从冷兵器时代到网络时代

    一.冷兵器时代,或者说农业化时代,进攻方没有远程可以摧城拔寨的热武器,只能靠人肉进攻,功与守是矛与盾的直接对抗,防守方依据地理优势可以轻松构筑强大的防线,使进攻方难以突破,高大的城墙,险峻的山寨,都会 ...

  7. Spring学习记录(九)---通过工厂方法配置bean

    1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. 1 package com.guigu.spring.factory; 2 3 public c ...

  8. Spring学习记录

    Spring相关 目录 文章目录 Spring相关 目录 前言 工厂设计模式 静态工厂模式 通用工厂模式 ApplicationContext ClassPathXmlApplicationConte ...

  9. spring学习记录(一)

    一.spring概述 spring是什么 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP ...

最新文章

  1. AI | 优化背后的数学基础
  2. 【Java Web开发指南】有状态会话Bean(SLSB) 和无状态会话Bean(SFSB)的区别
  3. python 线程类 threading.Thread.run() 方法
  4. VUE第三篇 入门后续
  5. arc.archives.class.php关于分页错位怎么修改,解决织梦分页错位的办法
  6. 旅游(树形dp求树的最大独立集)
  7. Selenium 4相对定位器如何改变您的测试方式?
  8. CCF 201312-3 最大的矩形[比较简单]
  9. vxetable显示html,vxe-table分页无法显示?
  10. 计算油费 (15 分)
  11. 剑指offer题目大全
  12. LSB 算法matlab改进版,将二值图嵌入多张灰度图像中
  13. SpringMVC 学谈 (第五章)
  14. 【佛系养身】男程序员护肤入门
  15. java毕业设计瓷砖仓库管理mybatis+源码+调试部署+系统+数据库+lw
  16. iOS 游戏app的开发
  17. 用Winrar打造永不被杀的免杀捆绑器!
  18. Android 第三方RoundedImageView设置各种圆形、方形头像
  19. 7-7 稳赢 (15 分)
  20. 树莓派+ubuntu18.04+ROS-melodic+MAVROS+librealsense+vio+realsense_ros

热门文章

  1. 如何幽默的介绍php是撒,如何幽默的做自我介绍
  2. iOS上使用自定义ttf字体
  3. 关于Android系统隐藏导航栏的两种方法
  4. 为什么低代码和专业代码走向融合才能破解低代码困境?
  5. webstorm 2018破解版本下载
  6. 慢慢消失的4K蓝光播放器命运会走向何方
  7. 裁撤一批员工后,马斯克又开始招人,推特2.0 PPT曝光
  8. 【亲测成功】springboot中.yml没有spring的小叶子标志和项目中也没有spring绿色标志的解决办法
  9. 微信小程序---- 外卖小程序查看实时地图路线(骑手端用户端)【高德地图】
  10. chromebook刷机_如何将文件复制到Chromebook上的USB闪存驱动器