博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中的依赖注入和控制反转
阅读量:4958 次
发布时间:2019-06-12

本文共 1510 字,大约阅读时间需要 5 分钟。

  在写这篇文章之前,首先说点题外话,其实自己本来不想学这么多编程语言的,原本想把精通一门作为目标,但是由于工作的原因,现在又不得不接触了java Spring MVC框架,开始学Spring的时候,对依赖注入与控制反转产生了一些疑惑,通过了查阅资料和编程实践,将自己的一些学习心得总结如下:

  在面向对象编程的时候,我们有时候会碰到这样的问题,高层模块的程序实现调用底层模块,当底层模块的对象类型改变时我们不得不改变高层模块的程序源代码,例如:

1 public class WhereToGo{2     private Male MrKing = new Male();3     public void tellMe(){4         System.out.println("I should go to man's room");5     }6 }
  
  如果是一个Female类型的对象(女人),那么就得改变程序的源代码,程序的控制权实际上在Male和Female类的手上。
  针对上述的情况,我们做如下的改变:
  先定义一个接口:
1 public interface Gender{2     public void tell();3 }
 
  在接口中声明一个方法,声明了这个方法后就可以供接口的不同实现来
重写这个方法,如下:
1 public Male implements Gender{ 2     public void tell(){ 3         System.out.println("I should go to man's room"); 4     } 5 } 6   7 public Female implements Gender{ 8     public void tell(){ 9         System.out.println("I should go to woman's room");10     }11 }
  
  重新实现了底层的Male和Female类,其核心是通过接口对方法进行
重写,然后我们重写WhereToGo类:
1 public class WhereToGo{2     private Gender g1;3     public void setGender(Gender g2){4         this.g1 = g2;5     }6     public void tellMe(){7         g1.tell();8     }9 }
  这个类主要通过接口将tellMe方法具体定义为Male.tell()或Female.tell(),控制权转移到了接口Gender。
  所以就实现了控制权由底层向抽象的转移。
 
  抽象:比如要描述一个人,人由很多种属性组成,我们用其中的两种:性别、年龄来描述这个人,并定义一个类:
1 class person{2     private name;3     private age;4 }
  那么这个类person就是对人的一个抽象,简言之,类和接口就是抽象,对象是实现。
 
  具体实现如下:
1 WhereToGo where = new WhereToGo();2 where.setGender(new Female);3 where.tellMe();
  有兴趣的可以自己试试。

转载于:https://www.cnblogs.com/fingerdancing/archive/2013/04/14/javaIoc.html

你可能感兴趣的文章
apache 实现图标缓存客户端
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
hdfs 命令使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
java语法之final
查看>>
python 多进程和多线程的区别
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
Setting up a Passive FTP Server in Windows Azure VM(ReplyCode: 227, Entering Passive Mode )
查看>>
Python模块调用
查看>>
委托的调用
查看>>
c#中从string数组转换到int数组
查看>>