Dhroid框架六大组件之Ioc容器【下】
2016-05-18 21:57
351 查看
眨眼又是一天过去了!!!今天,我们将继续讨论Ioc容器的剩余部分,先从上篇未讲完的get方法,开始解剖!
由代码可知,getSysService方法是用于获取一些常见类的对象,而这些类本身就是单例模式,如果需要获取的类对象不是常见的单例类。那么,就返回一个null值。然后,下一步继续判断,如果这个类本身是常见的单例类,就直接返回到get方法,get方法就再将这个对象继续往上层返回。如果是null,那就通过map类型的instanceByClazz来获取一个叫instance的实例,如果map类型里,有存放这个类对象,就直接返回。如果没有,就再判断这个类是不是接口类型,如果是,那get就返回个null。。因为,实现无法找到或创建一个类对象。如果这个类不是接口类型,那就将这个类捆绑到map容器里,然后生成一个对象。。这个地方,就帮我们做了,我们在上篇用大篇幅介绍的几个方法:
好了,到此为止,Ioc容器的源码就剖析完毕了!
但对于Ioc容器的学习,并不意味着到此结束,因为我们还有几个问题没有解疑:
1、Instance类的剩余代码,还有啥作用?(虽然主功能,已被我们解析完)
2、框架设计者,为何要做这个东西?这样做的好处又是啥?
3、费尽千辛万苦,就为了做个单例模式?完全可以用其它方法来实现,为什么要这样做呢?
但本人经验水平有限… …暂不能知道为啥,后面我会再深入学习,多思考,得到新心得后,再分享出来给大家。
//get方法的具体实现 public <T> T get(Class<T> clazz) { T t = getSysService(clazz); if (t != null) return t; Instance instance = instanceByClazz.get(clazz); if (instance != null) { return (T) instance.get(getApplicationContext()); // 接口过滤 } else if (!clazz.isInterface()) { bind(clazz).to(clazz).scope(InstanceScope.SCOPE_SINGLETON); Instance newins = instanceByClazz.get(clazz); if (newins != null) { return (T) newins.get(getApplicationContext()); } } return null; } //获取一些常见类的对象 public <T> T getSysService(Class<T> clazz) { T t = null; if (clazz == NotificationManager.class) { t = (T) getApplicationContext().getSystemService( Context.NOTIFICATION_SERVICE); } else if (clazz == ActivityManager.class) { t = (T) getApplicationContext().getSystemService( Context.ACTIVITY_SERVICE); } else if (clazz == PackageManager.class) { t = (T) getApplicationContext().getPackageManager(); } else if (clazz == AssetManager.class) { t = (T) getApplicationContext().getAssets(); } return t; }
由代码可知,getSysService方法是用于获取一些常见类的对象,而这些类本身就是单例模式,如果需要获取的类对象不是常见的单例类。那么,就返回一个null值。然后,下一步继续判断,如果这个类本身是常见的单例类,就直接返回到get方法,get方法就再将这个对象继续往上层返回。如果是null,那就通过map类型的instanceByClazz来获取一个叫instance的实例,如果map类型里,有存放这个类对象,就直接返回。如果没有,就再判断这个类是不是接口类型,如果是,那get就返回个null。。因为,实现无法找到或创建一个类对象。如果这个类不是接口类型,那就将这个类捆绑到map容器里,然后生成一个对象。。这个地方,就帮我们做了,我们在上篇用大篇幅介绍的几个方法:
bind(clazz).to(clazz).scope(InstanceScope.SCOPE_SINGLETON);
好了,到此为止,Ioc容器的源码就剖析完毕了!
但对于Ioc容器的学习,并不意味着到此结束,因为我们还有几个问题没有解疑:
1、Instance类的剩余代码,还有啥作用?(虽然主功能,已被我们解析完)
2、框架设计者,为何要做这个东西?这样做的好处又是啥?
3、费尽千辛万苦,就为了做个单例模式?完全可以用其它方法来实现,为什么要这样做呢?
但本人经验水平有限… …暂不能知道为啥,后面我会再深入学习,多思考,得到新心得后,再分享出来给大家。
相关文章推荐
- 插件管理框架 for Delphi(一)
- 使用CSS框架布局的缺点和优点小结
- 一起动手编写Android图片加载框架
- 基于.NET平台常用的框架和开源程序整理
- 列举PHP的Yii 2框架的开发优势
- Windows窗体的.Net框架绘图技术实现方法
- 浅谈JavaScript 框架分类
- 轻量级javascript 框架Backbone使用指南
- javascript实现框架高度随内容改变的方法
- JS刷新框架外页面七种实现代码
- 超赞的动手创建JavaScript框架的详细教程
- 深入探讨前端框架react
- js验证框架实现代码分享
- jQuery的框架介绍
- 简单介绍不用库(框架)自己写ajax
- 利用ASP.NET MVC+EasyUI+SqlServer搭建企业开发框架
- asp.net4.0框架下验证机制失效的原因及处理办法
- 插件管理框架 for Delphi(二)
- 零基础学习AJAX之AJAX框架
- Ajax 框架学习笔记