前一章 ioc基础(视图,资源,assert注入)-dhroid文档
下面到了接口对象的注入了解冻吧,现在才是我们的重点,这才是ioc的核心思想,上面的都是android的辅助
1.5 对象依赖问题
我们先来将一下对象对象依赖的重要性,很多同学可能只学了android没学过javaee ,跟没听过spring的强大
例如中我们dhroid库的dhnet网络模块中在网络加载时自动显示对话框,但是我们不能用默认的对话框,到了真正的项目框基本中是需要定制的
我们库中有不知道对话框长什么样,但是又要用
这时我们可以面向接口编程我们定义一个接口IDialog
public interface IDialog { public abstract void showToastShort(Context context, String s); public abstract Dialog showDialog(Context context, String s, String s1, DialogCallBack dialogcallback); public abstract Dialog showDialog(Context context, int i, String s, String s1, DialogCallBack dialogcallback); //等一些调用方法... }
这时候就可以用了我在需要用对话框的地方像下面一样
//编码获取 IDialog d=IocContainer.getShare().get(IDialog.class); //或者在属性在加注解 @Inject IDialog dialoger;
这样我们就可以拿到IDIalog 的实现类,当然这个还是需要配置的
下面是写在application中的配置DialogImpl.class就是我们的具体实现类
//配置对话框对象,这是接口配置写法 //项目中可以自己写对话框对象,然后在这进行配置,这里使用的是提供的默认配置 IocContainer.getShare().bind(DialogImpl.class).to(IDialog.class) //这是单例 .scope(InstanceScope.SCOPE_SINGLETON);
上面将DialogImpl.class绑定到了IDialog.class设置作用域为InstanceScope.SCOPE_SINGLETON,(DialogImpl.class是个默认实现)
下面来讲IocContainer的知识
使用ioc需要先在application初始化
//IOC的初始化
IocContainer.getShare().initApplication(this);
然后
IocContainer.getShare().bind(具体实现类).to(目标类或借口) //这是单例 .scope(作用域)
绑定到接口不在累赘了,上面已是一个很好的例子
下面看下如何绑定到对象类上
Class A{ public void test(){ } } Class AA extend A{ public void test(){ } } //配置 IocContainer.getShare().bind(AA.class) .to(A.class) .scope(InstanceScope.SCOPE_SINGLETON); //这样后如果调用 A aa=IocContainer.getShare().get(A.class) //或者 @Inject A aa; //拿到的对象是AA的实类,而不是A的实例很神奇吧
下面说下对象的作用域
InstanceScope.SCOPE_SINGLETON 单例(也可用于多例后面讲)
InstanceScope.SCOPE_PROTOTYPE 原型
单例大家应该都等,很经典的设计模式,
就是说IocContainer.getShare().get(A.class)拿出的永远都是同一个对象
而原型 只每次调用IocContainer.getShare().get(A.class)时哪出的都是一个新对象,
前面说到多例在配置时作用域也是InstanceScope.SCOPE_SINGLETON,多例只存在多个这样的对象你可以拿其中固定的一个对象
var atag1=IocContainer.getShare().get(A.class,"tag1");//拿出的都是被标志位tag1的对象,如果不存在会创建新的 var atag2=IocContainer.getShare().get(A.class,"tag2");//拿出的都是被标志位tag2的对象
上面就存在标志为tag1和tag2的两个对象
还没有完,下面才是难点
我们说个dhroid可以解除对象依赖,dhroid不仅可以在Activity可以注入在类中也可以
看下面例子
class A implements InjectFields{ @Inject public B b; @Override public void injected() { //这时候注入的属性已经有值了 if( b.a!=null){ Log.v("DH-INFO", "这是日志"); } } } A a=IocContainer.getShare().get(A.class);上面的拿到的A中属性已经被赋值了
相关推荐
Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...
Spring Ioc源码分析系列--自动注入循环依赖的处理.doc
Ioc模式解析 - JAVA - 技术天地 - 赛迪网.htm
Spring Ioc源码分析系列--@Autowired注解的实现原理.doc
IOC 基于 注解方式 实现---------------------- 半自动化配置 Spring 提供以下 四个注解 修饰类 @Service: 一般用来修饰 业务service层 @Repository: 一般用来修饰 数据访问dao层 @Component: 当一个类 , 分不清...
CVE-2019-19781的损害扫描程序指示器 该存储库包含一个实用程序,用于检测与CVE-2019-19781相关的Citrix ADC设备的威胁。 该实用程序及其资源对FireEye Mandiant调查期间收集到的危害指标进行编码。...
JAVA知识图谱:JVM、JMM、JUC、NIO、Netty、IOC、AOP、Jav-JavaKnowledge
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
mptsas: ioc0: attaching raid volume, channel 1, id 0 device-mapper: dm-raid45: initialized v0.2594l md: Autodetecting RAID arrays. 很明显是有的,只是无法确定RAID卡的类型是ioc0还是dm-raid45,于是开始...
QuteContainer是用于依赖项注入的轻型控制反转(IOC)容器。 QuteContainer使用C ++ Qt框架构建并用于C ++ Qt框架。 QuteContainer可以使用构造函数参数注入来自动解析对象依赖树。
spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和...
本书详细介绍了以JSP 2、Struts 2、Spring 2.5、Hibernate 3.2、AJAX等主流JavaEE技术进行优化组合开发高性能大型门户网站的实践经验。针对读者的不同学习阶段,共分技术篇、实践篇与部署篇三大部分进行循序渐进地...
IoC对象实例IoC对象实例IoC对象实例
一个web框架的IOC实现,Apache tapestry-ioc
spring配置xml完成IOC,这只是其中一个spring配置xml完成IOC,这只是其中一个spring配置xml完成IOC,这只是其中一个spring配置xml完成IOC,这只是其中一个spring配置xml完成IOC,这只是其中一个spring配置xml完成IOC,这...