控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI。更多IOC的解释自己百度去吧
下面我们看dhroid中的ioc
- 可以注入视图;
- 可以注入事件;
- 可以注入子视图;
- 可以注入资源(drawable,color,string...)
- 可以注入assert(注入文字,json,文件)
- 可以注入对象,接口(单例,多例,每次创建)
- 解决了对象间的依赖(A依赖于B,B同时依赖于A)
下面看具体实现吧
注解使用
- <b>//获取assert中的文本
- @InjectAssert(path="testtext.json")
- String testassert;
- //获取assert中的json
- @InjectAssert(path="testtext.json")
- JSONObject jo;
- //注入文件,因为注入文件时是在新线程里,所以建议在之前的页面就注入一次,不然文件大了会在使用时还没拷贝完成
- @InjectAssert(path="ivory.apk")
- File apkFile;
- //注入视图
- @InjectView(id=R.id.asserttext)
- TextView testassertV;
- @InjectView(id=R.id.resstring)
- TextView resstrV;
- //注入视图,和视图事件//itemClick和itemLongClick时间可以参照
- //注入时建议向下兼容,如果你的layout中是一个button且不需要换文字,请注入View,这样可以在将布局修改为image时前台不会出错
- @InjectView(id=R.id.assertFile,click="toInstal")
- View instalApkV;
- @InjectView(id=R.id.child_layout)
- ViewGroup childLayoutV;
- //注入布局文件
- @InjectView(layout=R.layout.ioc_head)
- View headV;
- //在其他视图中查看
- @InjectView(id=R.id.intext,inView="headV")
- TextView childTextV;
- //注入字串
- @InjectResource(string=R.string.app_name)
- String appname;
- //注入颜色
- //这里不能为int因为int有默认值0 有值的属性会被忽略,防止重复注入
- @InjectResource(color=R.color.link)
- Integer colorLink;
- //注入图片
- @InjectResource(drawable=R.drawable.ic_launcher)
- Drawable icDraw;
- //注入dimen
- @InjectResource(dimen=R.dimen.testdimen)
- Float dime;
- //接受传入的字符串
- @InjectExtra(name="str",def="默认值")
- String extra;
- //接受传入的数字
- @InjectExtra(name="int",def="1")
- Integer extraint;
- //接受传入的json对象(传入时是已字符串传入的)这个默认值没用
- @InjectExtra(name="jo")
- JSONObject extrajo;
- //标准注入 单例 注入接口 需要在application中配置
- @Inject
- IDialog dialoger;
- //标准注入 单例 注入类
- @Inject
- DhDB db;
- //根据tag拿对象这里拿到的manager1和manager1copy是同一对象,manager2和manager2copy是同一对象
- @Inject(tag="manager1")
- TestManager manager1;
- @Inject(tag="manager1")
- TestManager manager1copy;
- @Inject(tag="manager2")
- TestManager manager2;
- @Inject(tag="manager2")
- TestManager manager2copy;
- //这个测试根据名字获取对象配置请看application
- @Inject(name="testmm")//这里获取到的对象是TestManagerMM
- TestManager managermm;</b>
编码获取
- <font size="2"> TestDateHelper helper=IocContainer.getShare().get(TestDateHelper.class);
- IocContainer.getShare().get("testmm");</font>
对象(接口)的配置写在Application中
- <font size="2"> //IOC的初始化
- IocContainer.getShare().initApplication(this);
- //IOC配置下面两个是必须配置的
- //配置对话框对象,这是接口配置写法
- //项目中可以自己写对话框对象,然后在这进行配置,这里使用的是提供的默认配置
- IocContainer.getShare().bind(DialogImpl.class).to(IDialog.class)
- //这是单例
- .scope(InstanceScope.SCOPE_SINGLETON);
- //配置ValueFix对象基本每个项目都有自己的实现
- IocContainer.getShare().bind(DemoValueFixer.class)
- .to(ValueFix.class)
- .scope(InstanceScope.SCOPE_SINGLETON);
- //这是使用名字配置的方法,这样可以通过名字获取对象,使用不多
- IocContainer.getShare().bind(TestManagerMM.class)
- .name("testmm")
- .scope(InstanceScope.SCOPE_SINGLETON);
- //这个测试作用域InstanceScope.SCOPE_PROTOTYPE
- IocContainer.getShare().bind(TestDateHelper.class)
- .to(TestDateHelper.class)
- //这种作用域获取的每个对象都是独立的对象
- .scope(InstanceScope.SCOPE_PROTOTYPE).perpare(new PerpareAction() {
- //同时测试初始化后的回调
- @Override
- public void perpare(Object obj) {
- //在初始化完成后回调,当然在InjectFields接口中injected也有回调
- TestDateHelper helper=(TestDateHelper) obj;
- helper.setName("我是在初始化是提供名字的");
- }
- });
- //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 框架 ---- ...
【Castle IOC 容器详解】 在软件开发中,IOC(Inversion of Control,控制反转)是一种设计模式,它改变了传统程序中的控制流程,使得应用程序的组件不再自行管理其依赖关系,而是由一个外部容器(如 Castle ...
【IOC框架详解】 IOC(Inversion of Control)框架是一种软件设计模式,主要目的是为了降低对象间的耦合度,实现更好的可扩展性和可维护性。在传统的面向对象编程中,对象通常自行创建和管理它们所依赖的其他对象,...
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...
这是我在网上能够找到的所有关于WPF中IOC容器的资料,包括代码和文档。个人认为很值得一看。.
在本例中,可能有一个名为`spring-ioc-anno`的包,其中包含着使用注解配置的Spring bean。 为了启动Spring容器并运行应用程序,我们可以创建一个主类,使用`ApplicationContext`来加载配置并获取bean。例如: ```...
IOC(Inversion of Control)容器是软件设计模式中的一种,它将对象的创建和管理权从代码本身转移到一个外部容器,即IOC容器。这种反转控制使得程序更加灵活,降低了组件之间的耦合性,提高了可测试性和可维护性。本...
"基本照着敲"表明这是一个跟随教程操作的实践过程,旨在帮助初学者理解IOC容器的工作原理。通过注解实现依赖注入,意味着类的依赖关系不是在代码中硬编码,而是通过元数据(如Java注解)来定义,这样可以提高代码的...
**MVC模式与IOC容器互动详解** MVC(Model-View-Controller)模式是一种软件设计模式,常用于构建Web应用程序,以实现业务逻辑、数据处理和用户界面的分离。在这个模式中,Model代表数据模型,负责处理应用程序的...
Spring IOC 容器是Java开发中非常关键的组件,它是Spring框架的核心部分,负责管理对象的生命周期和依赖关系。本项目"手写一个SpringIoc容器"旨在模仿Spring的IOC(Inversion of Control,控制反转)功能,帮助...
### IoC 容器与 Dependency Injection 模式详解 #### 一、IoC 容器的概念及重要性 IoC(Inversion of Control,控制反转)容器是现代软件开发中的一项关键技术,尤其在 Java 社区中备受关注。它允许程序员以一种...
在压缩包子文件"my-spring-ioc-master"中,可能包含了一个完整的示例项目,该项目演示了如何手动构建一个简易的Spring IOC容器。项目中可能包括以下部分: - **BeanDefinition**: 表示Bean定义的类,存储Bean的信息...
在Java开发领域,Spring框架无疑是使用最为广泛的轻量级框架之一,其中的核心组件就是IOC(Inversion of Control)容器。本文将深入剖析Spring的IOC容器,理解其工作原理和重要功能,以帮助开发者更好地利用这一强大...
2. 该IoC容器包含3个注解和一个IoC容器类(AnnotationConfigApplicationContext),其定义如下: 注解 含义 @Component 标注Bean @Autowired 标注需要被注入的对象 @Configuration 标注为配置类 @ComponentScan ...
在Spring框架中,IoC(Inversion of Control)容器是其核心特性之一,它负责管理对象的生命周期和依赖关系。IoC容器通过控制反转的概念,将对象的创建和依赖关系的配置从应用代码中分离出来,使代码更加灵活、可测试...
在Java世界里,Spring框架是最著名的IOC容器实现之一,但除此之外,还有很多小型、轻量级的IOC容器,比如本案例中的"mini-container"。 "mini-container"是一个开源项目,它的目标是提供一个功能简洁但实用的IOC...
### Spring IoC容器部署实现详解 #### 一、Spring IoC容器概述 Spring框架的核心特性之一就是Inversion of Control(IoC),也被称为Dependency Injection(DI)。IoC容器是Spring框架的重要组成部分,它负责管理...
Spring 框架系列(7)- Spring IOC 实现原理详解之 IOC 初始化流程 本文将详细解释 Spring 框架中的 IOC(Inversion of Control,控制反转)实现原理之 IOC 初始化流程。IOC 是一种软件设计模式,用于将软件系统中...