`

IOC容器详解(想晋升的进来)---dhroid框架教教程(一)

 
阅读更多


控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI更多IOC的解释自己百度去吧


下面我们看dhroid中的ioc

  • 可以注入视图;
  • 可以注入事件;
  • 可以注入子视图;
  • 可以注入资源(drawable,color,string...)
  • 可以注入assert(注入文字,json,文件)
  • 可以注入对象,接口(单例,多例,每次创建)
  • 解决了对象间的依赖(A依赖于B,B同时依赖于A)


下面看具体实现吧


注解使用

  1. <b>//获取assert中的文本
  2.         @InjectAssert(path="testtext.json")
  3.         String testassert;
  4.         //获取assert中的json
  5.         @InjectAssert(path="testtext.json")
  6.         JSONObject jo;
  7.         
  8.         //注入文件,因为注入文件时是在新线程里,所以建议在之前的页面就注入一次,不然文件大了会在使用时还没拷贝完成
  9.         @InjectAssert(path="ivory.apk")
  10.         File apkFile;
  11.         //注入视图
  12.         @InjectView(id=R.id.asserttext)
  13.         TextView testassertV;
  14.         @InjectView(id=R.id.resstring)
  15.         TextView resstrV;
  16.         //注入视图,和视图事件//itemClick和itemLongClick时间可以参照
  17.         //注入时建议向下兼容,如果你的layout中是一个button且不需要换文字,请注入View,这样可以在将布局修改为image时前台不会出错
  18.         @InjectView(id=R.id.assertFile,click="toInstal")
  19.         View instalApkV;
  20.         @InjectView(id=R.id.child_layout)
  21.         ViewGroup childLayoutV;
  22.         //注入布局文件
  23.         @InjectView(layout=R.layout.ioc_head)
  24.         View headV;
  25.         //在其他视图中查看
  26.         @InjectView(id=R.id.intext,inView="headV")
  27.         TextView childTextV;
  28.         
  29.         
  30.         //注入字串
  31.         @InjectResource(string=R.string.app_name)
  32.         String appname;
  33.         //注入颜色
  34.         //这里不能为int因为int有默认值0 有值的属性会被忽略,防止重复注入
  35.         @InjectResource(color=R.color.link)
  36.         Integer colorLink;
  37.         //注入图片
  38.         @InjectResource(drawable=R.drawable.ic_launcher)
  39.         Drawable icDraw;
  40.         //注入dimen
  41.         @InjectResource(dimen=R.dimen.testdimen)
  42.         Float dime;
  43.         
  44.         
  45.         //接受传入的字符串
  46.         @InjectExtra(name="str",def="默认值")
  47.         String extra;
  48.         //接受传入的数字
  49.         @InjectExtra(name="int",def="1")
  50.         Integer extraint;
  51.         //接受传入的json对象(传入时是已字符串传入的)这个默认值没用
  52.         @InjectExtra(name="jo")
  53.         JSONObject extrajo;
  54.         
  55.         
  56.         //标准注入 单例  注入接口 需要在application中配置
  57.         @Inject
  58.         IDialog dialoger;
  59.         
  60.         //标准注入 单例  注入类
  61.         @Inject
  62.         DhDB db;
  63.         
  64.         //根据tag拿对象这里拿到的manager1和manager1copy是同一对象,manager2和manager2copy是同一对象
  65.         @Inject(tag="manager1")
  66.         TestManager manager1;
  67.         @Inject(tag="manager1")
  68.         TestManager manager1copy;
  69.         @Inject(tag="manager2")
  70.         TestManager manager2;
  71.         @Inject(tag="manager2")
  72.         TestManager manager2copy;
  73.         
  74.         
  75.         //这个测试根据名字获取对象配置请看application
  76.         @Inject(name="testmm")//这里获取到的对象是TestManagerMM
  77.         TestManager managermm;</b>
复制代码


编码获取

  1. <font size="2">        TestDateHelper helper=IocContainer.getShare().get(TestDateHelper.class);
  2. IocContainer.getShare().get("testmm");</font>
复制代码


对象(接口)的配置写在Application中

  1. <font size="2">        //IOC的初始化
  2.                 IocContainer.getShare().initApplication(this);
  3.                 //IOC配置下面两个是必须配置的
  4.                 //配置对话框对象,这是接口配置写法
  5.                 //项目中可以自己写对话框对象,然后在这进行配置,这里使用的是提供的默认配置
  6.                 IocContainer.getShare().bind(DialogImpl.class).to(IDialog.class)
  7.                 //这是单例
  8.                 .scope(InstanceScope.SCOPE_SINGLETON);
  9.                 //配置ValueFix对象基本每个项目都有自己的实现
  10.                 IocContainer.getShare().bind(DemoValueFixer.class)
  11.                 .to(ValueFix.class)
  12.                 .scope(InstanceScope.SCOPE_SINGLETON);
  13.                 
  14.                 //这是使用名字配置的方法,这样可以通过名字获取对象,使用不多
  15.                 IocContainer.getShare().bind(TestManagerMM.class)
  16.                 .name("testmm")
  17.                 .scope(InstanceScope.SCOPE_SINGLETON);
  18.                 
  19.                 //这个测试作用域InstanceScope.SCOPE_PROTOTYPE
  20.                 IocContainer.getShare().bind(TestDateHelper.class)
  21.                 .to(TestDateHelper.class)
  22.                 //这种作用域获取的每个对象都是独立的对象
  23.                 .scope(InstanceScope.SCOPE_PROTOTYPE).perpare(new PerpareAction() {
  24.                         //同时测试初始化后的回调
  25.                         @Override
  26.                         public void perpare(Object obj) {
  27.                                 //在初始化完成后回调,当然在InjectFields接口中injected也有回调
  28.                                 TestDateHelper helper=(TestDateHelper) obj;
  29.                                 helper.setName("我是在初始化是提供名字的");
  30.                         }
  31.                 });
  32.                 //IOC中基本bind的类对象和to的类想象如果是同一个且是单例或通过Tag获取是不需要配置的</font>
复制代码






















更多链接
dhroid介绍总贴:http://www.apkbus.com/forum.php?mod=viewthread&tid=165287


开源中国地址:http://www.oschina.net/p/dhroid
开源项目地址:http://git.oschina.net/tengzhinei/dhroid

分享到:
评论

相关推荐

    Spring5 框架 ---- IOC容器 ---- 代码

    Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...

    Castle IOC容器详解

    【Castle IOC 容器详解】 在软件开发中,IOC(Inversion of Control,控制反转)是一种设计模式,它改变了传统程序中的控制流程,使得应用程序的组件不再自行管理其依赖关系,而是由一个外部容器(如 Castle ...

    IOC框架详解

    【IOC框架详解】 IOC(Inversion of Control)框架是一种软件设计模式,主要目的是为了降低对象间的耦合度,实现更好的可扩展性和可维护性。在传统的面向对象编程中,对象通常自行创建和管理它们所依赖的其他对象,...

    spring Ioc容器配置

    spring Ioc容器配置 IOC容器数据源配置 &lt;!-- 配置数据源 --&gt; destroy-method="close"&gt; &lt;value&gt;org.gjt.mm.mysql.Driver &lt;value&gt;jdbc:mysql://localhost:3306/demo &lt;value&gt;root ...

    WPF中的IOC容器-4

    这是我在网上能够找到的所有关于WPF中IOC容器的资料,包括代码和文档。个人认为很值得一看。.

    Spring IoC简单示例-注解配置-Maven构建

    在本例中,可能有一个名为`spring-ioc-anno`的包,其中包含着使用注解配置的Spring bean。 为了启动Spring容器并运行应用程序,我们可以创建一个主类,使用`ApplicationContext`来加载配置并获取bean。例如: ```...

    IOC容器简单实现

    IOC(Inversion of Control)容器是软件设计模式中的一种,它将对象的创建和管理权从代码本身转移到一个外部容器,即IOC容器。这种反转控制使得程序更加灵活,降低了组件之间的耦合性,提高了可测试性和可维护性。本...

    简单IOC容器demo

    "基本照着敲"表明这是一个跟随教程操作的实践过程,旨在帮助初学者理解IOC容器的工作原理。通过注解实现依赖注入,意味着类的依赖关系不是在代码中硬编码,而是通过元数据(如Java注解)来定义,这样可以提高代码的...

    MVC与IOC容器互动

    **MVC模式与IOC容器互动详解** MVC(Model-View-Controller)模式是一种软件设计模式,常用于构建Web应用程序,以实现业务逻辑、数据处理和用户界面的分离。在这个模式中,Model代表数据模型,负责处理应用程序的...

    手写一个SpringIoc容器

    Spring IOC 容器是Java开发中非常关键的组件,它是Spring框架的核心部分,负责管理对象的生命周期和依赖关系。本项目"手写一个SpringIoc容器"旨在模仿Spring的IOC(Inversion of Control,控制反转)功能,帮助...

    IoC 容器和Dependency Injection 模式

    ### IoC 容器与 Dependency Injection 模式详解 #### 一、IoC 容器的概念及重要性 IoC(Inversion of Control,控制反转)容器是现代软件开发中的一项关键技术,尤其在 Java 社区中备受关注。它允许程序员以一种...

    手动实现一个ioc容器.zip

    在压缩包子文件"my-spring-ioc-master"中,可能包含了一个完整的示例项目,该项目演示了如何手动构建一个简易的Spring IOC容器。项目中可能包括以下部分: - **BeanDefinition**: 表示Bean定义的类,存储Bean的信息...

    Spring IOC容器实现分析.pdf 下载

    在Java开发领域,Spring框架无疑是使用最为广泛的轻量级框架之一,其中的核心组件就是IOC(Inversion of Control)容器。本文将深入剖析Spring的IOC容器,理解其工作原理和重要功能,以帮助开发者更好地利用这一强大...

    IoC容器的设计(利用反射、注解和工厂模式实现)

    2. 该IoC容器包含3个注解和一个IoC容器类(AnnotationConfigApplicationContext),其定义如下: 注解 含义 @Component 标注Bean @Autowired 标注需要被注入的对象 @Configuration 标注为配置类 @ComponentScan ...

    模拟Spring的IoC容器实现注解自动装配

    在Spring框架中,IoC(Inversion of Control)容器是其核心特性之一,它负责管理对象的生命周期和依赖关系。IoC容器通过控制反转的概念,将对象的创建和依赖关系的配置从应用代码中分离出来,使代码更加灵活、可测试...

    IOC容器 mini-container

    在Java世界里,Spring框架是最著名的IOC容器实现之一,但除此之外,还有很多小型、轻量级的IOC容器,比如本案例中的"mini-container"。 "mini-container"是一个开源项目,它的目标是提供一个功能简洁但实用的IOC...

    spring ioc容器部署实现

    ### Spring IoC容器部署实现详解 #### 一、Spring IoC容器概述 Spring框架的核心特性之一就是Inversion of Control(IoC),也被称为Dependency Injection(DI)。IoC容器是Spring框架的重要组成部分,它负责管理...

    Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程.doc

    Spring 框架系列(7)- Spring IOC 实现原理详解之 IOC 初始化流程 本文将详细解释 Spring 框架中的 IOC(Inversion of Control,控制反转)实现原理之 IOC 初始化流程。IOC 是一种软件设计模式,用于将软件系统中...

Global site tag (gtag.js) - Google Analytics