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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么重新启动协议服务器,ssl协议怎么开启

    怎么重新启动协议服务器,ssl协议怎么开启1.首先打开浏览器,找到工具→Internet选项2.找到高级选项卡,下面的使用SSL3.0勾选之后,点击保存即可。3.重新打开网站检查。对于chrome浏览器,SSL和TLS都协议是默认开启的,可以按下F12,然后在开发者工具中查看当前使用的协议版本。若是服务器配置ssl协议证书,首先确认Apache服务器已经安装有加密模块,可以是OpenSSL,或是OpenSSL+ModSSL。通过O…

    2022年5月18日
    62
  • HTTP和HTTPS的区别

     CA认证电子商务认证授权机构(CA,CertificateAuthority),也称为电子商务认证中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任HeartbleedHeartbleed漏洞,这项严重缺陷(CVE-2014-0160)的产生是由于未能在memcpy()调用受害用户输入内容作为长度参数之前正确进行…

    2022年4月5日
    68
  • 77. Combinations「建议收藏」

    77. Combinations「建议收藏」Giventwointegers n and k,returnallpossiblecombinationsof k numbersoutof1… n.Forexample,If n =4and k =2,asolutionis:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]

    2022年10月6日
    0
  • mt4电脑版下载_mt4安卓版官网下载

    mt4电脑版下载_mt4安卓版官网下载mt4作为大部分投资者使用的交易软件,在版本上也是非常全面,涵盖了手机和电脑版。手机端和电脑版各有优势,手机端可以让交易者随时随地下单,查看行情,而电脑端利用指标分析行情上非常有优势,并且电脑端更方便于查看。今天来重点讲解一下电脑版MT4的下载和安装。电脑版的MT4首先是要找安装一个客户端,那第一步就是得下载安装包,电脑端的安装包都是去网页上下载qiejf。cn无论是软件的页面还是选择的平台的官网,都会有安装包可供下载。将安装包下载保存到电脑后,直接双击,根据提示点击下一步,安装即可。安装好了就

    2022年8月15日
    2
  • UML类图总结(浅显易懂实用)

    UML类图总结(浅显易懂实用)UML类图的作用是描述程序中类的信息及各个类之间的关系。所有的面向对象(ObjectOriented)语言都离不开类的概念,理解了程序中类的设计也就理解了程序的一半。但类的具体描述方式在各个类中都不一样,UML类图的提出是为了能够脱离语言的限制,抽象地描述各个类的信息及各个类之间的关系。这是UML类图的作用。一、类的基本表示方式在UML类图中,每一个矩形代表一个类。我们举一个简单的例子:这是一个…

    2022年7月12日
    13
  • vscode设置vue模板_vscode怎么创建vue项目

    vscode设置vue模板_vscode怎么创建vue项目VSCode配置Vue模板代码前端行业使用的编辑器有很多,比如VSCode和webStorm,其中在创建vue文件后webStorm可以自动生成相关的代码,而在VSCode中得一个一个的敲,这样既浪费时间又效率低,因此,在VSCode中可以一键生成vue模板吗?当然可以,过程如下:1、打开VSCode编辑器2、左上角文件(F)=>首选项=>用户片段3、在出现的框中输入vue之后按回车键4、在出现的vue.json文件内写入以下代码

    2022年9月6日
    2

发表回复

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

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