IOC

IOC

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

控制反转(Inversion of Control,缩写IoC),面向对象编程是一种设计原理。它可用于降低计算机代码之间的耦合程度。其中最常见的方法被称为依赖注入(Dependency Injection,缩写DI),一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内全部对象的外界实体,将其所依赖的对象的引用传递给它。也能够说,依赖被注入到对象中。


技术描写叙述

Class A中用到了Class B的对象b。普通情况下。须要在A的代码中显式的new一个B的对象。

採用依赖注入技术之后,A的代码仅仅须要定义一个私有的B对象,不须要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。

而详细获取的方法、对象被获取时的状态由配置文件(如XML)来指定。

实现方法
实现控制反转主要有两种方式:依赖注入和依赖查找。两者的差别在于,前者是被动的接收对象,在类A的实例创建过程中即创建了依赖的B对象,通过类型或名称来推断将不同的对象注入到不同的属性中,而后者是主动索取响应名称的对象,获得依赖对象的时间也能够在代码中自由控制。
依赖注入有例如以下实现方式:
基于接口。实现特定接口以供外部容器注入所依赖类型的对象。
基于 set 方法。

实现特定属性的public set方法,来让外部容器调用传入所依赖类型的对象。
基于构造函数。

实现特定參数的构造函数。在新建对象时传入所依赖类型的对象。

基于注解。基于Java的注解功能。在私有变量前加“@Autowired”等注解。不须要显式的定义以上三种代码,便能够让外部容器传入相应的对象。该方案相当于定义了public的set方法。可是由于没有真正的set方法,从而不会为了实现依赖注入导致暴露了不该暴露的接口(由于set方法仅仅想让容器訪问来注入而并不希望其它依赖此类的对象訪问)。
Android学习进阶和IoC
1.成为Android高手一般分为六个阶段:

        第一阶段:熟练掌握Java SE,尤其是对其内部类、线程、并发、网络编程等须要深入研究;熟练掌握基于HTTP协议的编程,清楚POST和GET等请求方式流程和细节;可以进行主要的Java Web编程,假设可以使用Java EE则更好。   

       第二阶段:精通Android的核心API的使用,比如四大组件所涉及的API、Context等,精通核心界面的编程。比如ListView的编程;到达这个阶段已经可以做大部分主要的应用开发了。

      第三阶段:精通应用框架的原理,尤其是对IoC的理解及其在Android应用框架中的应用,精通主要的23种设计模式在Android中的应用;      

      第四阶段:精通JNI,熟练Android类库中C/C++组件开发。并可以使用JNI机制把现有的C/C++组件移植成为应用框架的核心组件;具备改动和编写自己的应用框架的能力;   

      第五阶段:做出自己的Android系统。不管是底层还是上层都可以了如指掌;可以依据实际须要设计和实现比較大Android系统。比如带领比較大的团队做出自己的Android手机产品等。

        第六阶段:势。一切的思考均进入“势”的思考,一切都是思路问题,推断和预測Android的形势,引领市场,通往自由的天堂。

2. Android之IoC (Inversion of Control)
1)概念
        一种设计思想。

使调用者和被调用者解耦和分离,便于更改和代码重用,便于移植。

        很多应用都是由多个类通过彼此合作来实现业务逻辑,每一个对象之间都相互依赖,这将导致代码高度耦合而且难以測试、难以改动难以重用。

    IoC非常好的攻克了该问题,它将实现组件间关系从程序内部提到外部容器来管理。也就是说由容器在执行期将组件间的某种依赖关系动态的注入组件中。控制程序间关系的实现交给了外部容器来完毕。
2)案例
为了实现调用者和被调用者解耦,分离。通常是通过工厂模式实现的,以下将通过比較工厂模式和Ioc模式不同。加深理解Ioc模式。

如果有两个类B 和 C:B作为调用者。C是被调用者。

一般的做法是:
public class B{
   private C comp=new C(); 
  ……
}
工厂模式实现例如以下:
public class B{
  private C comp; 
  private final static MyFactory myFactory = MyFactory.getInstance();
  public B(){
    this.comp = myFactory.createInstanceOfC();
  }
   public void someMethod(){
    this.comp.sayHello();
  } 
}
使用Ioc依赖性注射实现Picocontainer例如以下:
public class B{
  private C comp; 
  public B(C comp){
    this.comp = comp;
   }
   public void someMethod(){
    this.comp.sayHello();
   }
}
//外部容器实现。控制程序间的关系。

CImp类为C接口/类的一个详细实现。
public class client{
   public static void main( String[] args ) {
    DefaultPicoContainer container = new DefaultPicoContainer();
    container.registerComponentImplementation(CImp.class); //向B类实现注射C类详细实现
    container.registerComponentImplementation(B.class);
    B b = (B) container.getComponentInstance(B.class);
    b.someMethod();
   }
}
3)工厂模式和Ioc不同的特点和差别:
  如上,主要差别体如今B类的代码,假设使用Ioc,在B类代码中将不须要嵌入不论什么工厂模式等的代码。由于这些工厂模式事实上还是与C有些间接的联系,这样,使用Ioc彻底解耦了B和C之间的联系。

  使用Ioc带来的代价是:须要在client或其他某处进行B和C之间联系的组装。
  所以,Ioc并没有消除B和C之间这种联系。仅仅是转移了这种联系。

  总之,使用Ioc模式,能够无论将来详细实现,全然在一个抽象层次进行描写叙述和技术架构。

http://blog.csdn.net/blog_wang/article/details/38468547   //注解绑定UI

http://blog.csdn.net/lindir/article/details/7843109

http://blog.csdn.net/zhaokaiqiang1992/article/details/37929071

http://www.cnblogs.com/devinzhang/p/3862942.html      //依赖注入和控制反转

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117006.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • c++禁止隐式转换_无法将int隐式转换为类

    c++禁止隐式转换_无法将int隐式转换为类C++有一个很方便的功能—隐式转换,比如有一个函数voidfunc(doublef);调用它的时候func(5);func(5.0);都是有效的。但有时候,这个功能就很麻烦了。比如:classA{public:A(conststring&v){///…}}void…

    2022年10月11日
  • jb激活码_在线激活

    (jb激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1S…

    2022年3月27日
  • java主要包括哪几种开发平台_成熟的java开发平台

    java主要包括哪几种开发平台_成熟的java开发平台1java都有哪些开发平台Java编程语言是流行的开发语言,也是IT行业非常火的就业方向,当然难度也是相对较大的。即使那些有计算机基础的小伙们参加java培训,不认真的学习,也会显得吃力。下面小编给大家说说java都有哪些开发平台,希望能对你有些帮助。Eclipse是最有名也最广泛使用的Java集成开发环境(IDE),允许开发者结合语言支持和其他功能到任何的默认包中,而且Eclipse市场有许多定…

    2022年8月23日
  • Android语音采集两种方式MediaRecorder和AudioRecord

    Android语音采集两种方式MediaRecorder和AudioRecord

    2021年8月31日
  • idea热部署(JRebel实现)

    idea热部署(JRebel实现)idea热部署(JRebel实现)1.安装JRebel插件//1.File->Settings->Plugins->搜索JRebel插件//2.搜索的时候可能任何插件都搜索不到,可以百度查找设置httpProxy配置配置JRebel插件//1.在左下角的JRebel菜单栏找到JRebel插件然后将需要热更新的项目打上对勾即可。启动项目//1.配置完成后使用JRebel按钮进行启动项目,配置成功日志框中会显示JRebel相关的日志信息。

    2022年6月16日
  • 【详细教程·本人亲测】解决win10家庭版系统C:\Users用户名中有中文,更改为英文的问题

    【详细教程·本人亲测】解决win10家庭版系统C:\Users用户名中有中文,更改为英文的问题【本人亲测】解决win10家庭版系统C:\Users用户名更改的问题【前言】新电脑刚买来,自带win10系统,激活时注册用户名和密码,为了方便记忆把用户名设为中文。随着后来学习和工作软件越装越多,在学习软件开发才发现Users必须为英文,此时重装系统成本极大!因此本人花了大量时间在网上寻找解决方案。但是基本上不适合win10家庭版。终于最后搜到一个方案解决,深知不易,特分享给各位。<第一…

    2022年5月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号