我们都知道java是面向对象的语言;

一个人是一个对象一个物品也是一个对象;

在刚刚接触Spring的时候只知道用Spring来管理咱们的一个个对象,一直知道Spring 提倡的面向接口的编程方式,经过很久的使用,终于能一窥其中的奥秘;

首先来看

假设一个中国人那么他有eat() 方法也有say()方法

一个日本人那么他也有eat()方法 也有say()方法

如果刚开始没发现有日本人,那么肯定只会写一个中国的方法;

public static void ChinaPesonImpinit(ApplicationContext context)
{ChinaPesonImp ChinaPesonImp = context.getBean(ChinaPesonImp.class);ChinaPesonImp.eat();ChinaPesonImp.Say();
}

程序运行也是很OK;

有天发现有日本人了,那么突然发现中国人的方法不能用了要重新写一个日本人的方法

public static void JapanPesonImpinit(ApplicationContext context)
{JapanPesonImp JapanPesonImp = context.getBean(JapanPesonImp.class);JapanPesonImp.eat();JapanPesonImp.Say();
}

那么以此类推美国人  英国人。...好多方法 来一个人就要增加一个方法

那么Spring 如何解决的呢?

首先既然他们都有相同的方法那么新建一个接口PersonInterface

public interface PersonDao {public String Say();public String eat();}

那么理所当然ChinaPesonImp 需要实现这个接口

@Component
public class ChinaPesonImp implements PersonInterface {@Resource(name="PersonServiceimp")com.xj.Interface.PesonServiceInterface PesonServiceInterface;@Overridepublic void Say() {System.out.println(PesonServiceInterface.Say());}@Overridepublic void eat() {System.out.println(PesonServiceInterface.eat());}}那么理所当然JapanPesonImp也需要实现这个接口@Component
public class JapanPesonImp implements PersonInterface {@Resource(name="PersonServiceimpto")com.xj.Interface.PesonServiceInterface PesonServiceInterface;@Overridepublic void Say() {System.out.println(PesonServiceInterface.Say());}@Overridepublic void eat() {System.out.println(PesonServiceInterface.eat());}}

那么现在我们可以不关注是哪国人来了,只要你实现了接口我们认为你就是人咱一个方法就搞定了;

 public static void init(ApplicationContext context,Class classname){@SuppressWarnings("unchecked")PersonInterface PersonInterface = context.getBean(classname);PersonInterface.eat();PersonInterface.Say();}

那么这个时候新来的英国人怎么办;

那就实现PersonInterface接口, 再将这个实现的实例传入Init方法中一个方法就搞定了;

  public static void main( String[] args ){ApplicationContext context = new AnnotationConfigApplicationContext(SpringRunStartConfig.class);init(context,ChinaPesonImp.class);init(context,JapanPesonImp.class);}

其实在现实生活中假设你要跟某个公司沟通一个具体的工作事项,你想想你先找谁?

正常的流程;对面公司的对接人(接口),对接人将具体负责这块的人(接口实现类)的结果,然后反馈给你;

那么以后有问题你就找对接人,不需要找负责这块的某个人员。

那么这个人以后离职或者不上班你都不用管,由对接人全权负责。

------------------------------------------------------

如果你直接找对方接口人负责人就会发生不可控因素;

1、今天是他明天可能是她;傻傻你分不清楚

2、你今天依赖他,明天他走了你又要依赖别人。好费心

理解Spring面向接口编程思想相关推荐

  1. 细说Mybatis一级缓存、二级缓存以及mybatis获取mapper的面向接口编程思想(Mapper接口动态代理实现原理)(二)

    上一章和大家分享了Mybatis一级缓存和二级缓存,本章将继续和大家分享Mapper接口动态代理实现原理,按照国际惯例,先看源码,然后结合原理,写一个自己的小demo,从理论到实战,真正掌握面向接口编 ...

  2. 透彻理解Spring事务设计思想之手写实现

    2019独角兽企业重金招聘Python工程师标准>>> 前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原 ...

  3. 【手写系列】透彻理解Spring事务设计思想之手写实现

    事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Dura ...

  4. spring 面向接口编程_Spring面向方面的编程

    spring 面向接口编程 介绍 在理想的面向对象系统中,我们希望将每个对象设计为执行一项特定任务. 但是,除了执行其主要任务之外,对象还执行被动任务,例如日志记录,事务,安全性,缓存等.这些被动活动 ...

  5. 彦舜原创,CSDN首发:面向接口编程思想,设计程序

    /*** 彦舜原创,CSDN首发*/ package cn.yanshun.design;/*** @author 彦舜**/ public class Test3_Design {/*** */pu ...

  6. php面向接口编程思想,面向接口编程 - Laravel 实践

    面向接口编程是编码中的一种设计思想,这种方式基于接口而不是固定的类来构建应用程序. 如果您是一名程序员,那么您可能听说过则这样的说法,例如:面向接口编程.使用抽象类代替固定类等等. 这些都是说的同一件 ...

  7. 如何能理解 Spring 框架的思想?

    Spring 简述 1.1 什么是 Spring ? Spring 是一个轻量级的开源的 JavaEE 框架,由作者 Rod Johnson 创建,兴起于 2003 年.目的是为了解决企业级开发的复杂 ...

  8. 面向接口编程详解(一)——思想基础

    我想,对于各位使用面向对象编程语言的程序员来说,"接口"这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为 ...

  9. 面向接口编程详解(一)—— 思想基础

    我想,对于各位使用面向对象编程语言的程序员来说,"接口"这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为 ...

最新文章

  1. 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)
  2. oracle profile
  3. MATLAB和Python读取wave文件的波形对比
  4. 关联、聚合、组合的关系[转]
  5. C/C++基本数据类型所占字节数
  6. java gdal postgresql_使用GDAL/OGR操作Postgresql数据库
  7. 基于java SSM springboot动物检疫信息管理系统设计和实现
  8. THD 变量存入threads中
  9. 图像转svg,及绘制svg图像
  10. 团队作业个人博客07
  11. 教你用手机制作二寸证件照,操作简单,一学就会!
  12. 如何将wav转为mp3格式,wav中间mp3步骤
  13. 用 Python 进行 OCR 图像识别
  14. TOM邮箱6.0版新功能体验—全新的交互设计
  15. html图片边框的颜色,css图片的边框怎么设置颜色?
  16. 利用excel搭建动态图表
  17. 微信公众平台开通业务域名
  18. 页面html背景图片居中显示文字,DIV+CSS中让布局、背景图片、文字内容居中的方法...
  19. 四阶魔方玩法总结V1.0
  20. ppt转为6页pdf讲义

热门文章

  1. pandas数据处理基础之标准化与标签数值化
  2. 单隐层神经网络可以拟合任意单值连续函数
  3. 布斯乘法 Mips实现 - Booth Algorithm
  4. 快速傅里叶变换-快速傅里叶变换
  5. 深入浅出Java Object Layout (JOL)
  6. 研究生招生信息网服务器异常,2012研究生网上报名常见问题汇总
  7. 【视觉SLAM十四讲】第八讲 光流法与直接法
  8. WDF开发USB设备驱动教程(1)
  9. widget jquery 理解
  10. nexus3仓库搭建