1 ioc即控制反转。
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。
控制反转还有一个名字叫做依赖注入(Dependency Injection)
dhroid的ioc不仅实现了视图和资源的注入,同时对于对象,接口的注入做了很大的努力

ioc中最简单最好实现的就是视图资源注入,dhroid的ioc核心其实是对象(接口的)注入
下面还是从简单的视图注入开始到复杂的接口对象注入
1.1注入视图

public class IocTestActivity extends BaseActivity{
@InjectView(id=R.id.text)
TextView textV; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ioc_test_activity);
if(textV==null){
Log.e("dhroid", "textV不为空,我是不会打印的");
}
}
}

上边就是一个视图注入的例子
textV在contentView(layout)之后就已经被赋值了

1.1注入视图
注入视图的注解是 @InjectView

@InjectView,参数id
进行视图查找,相当于findViewById(R.id.xxx) @InjectView 的参数属性layout
可以注入一个layout布局, 相当于LayoutInflater.from(this).inflate(R.layout.xxx, null); 如
@InjectView(layout=R.layout.ioc_head)
ViewGroup headV; @InjectView 的参数属性inView
表明该view只某个view的子view

//注入布局文件
@InjectView(layout=R.layout.ioc_head)
ViewGroup headV;
//在其他视图中查看
@InjectView(id=R.id.intext,inView="headV")
TextView childTextV;

表明childTextV是headV的子view
相当于

headV=(ViewGroup )LayoutInflater.from(this).inflate(R.layout.ioc_head, null);
childTextV=headV.findViewById(R.id.intext);

1.1.1 为视图添加事件

下面的代码添加了点击事件

@InjectView(id=R.id.assertFile,click="toInstal")
View instalApkV; public void toInstal(View v) {
Log.v("dhroid", "instalApk点击后我会被执行");
} 事件还有itemclick 和itemLongclick
@InjectView(id=R.id.listView,itemClick="toEditStudent",itemLongClick="toDeleteStudent")
ListView listView; public void toEditStudent(AdapterView<?> parent, View view, int position, long id) {
Log.v("dhroid", "itemClick事件");
} public void toDeleteStudent(AdapterView<?> parent, View view, final int position, long id) {
Log.v("dhroid", "itemLongClick事件");
}

1.2注入资源
使用注解@InjectResource
资源可以注入drawable,string,color,dimen

下面代码相当于getResources().getString(R.string.app_name)

//注入字串
@InjectResource(string=R.string.app_name)
String appname;

下面代码相当于getResources().getDrawable(R.drawable.ic_launcher)

@InjectResource(drawable=R.drawable.ic_launcher)
Drawable icDraw; color,和dimen同理
//这里不能为int因为int有默认值0 有值的属性会被忽略,防止重复注入 @InjectResource(color=R.color.link)
Integer colorLink; //注入图片
@InjectResource(drawable=R.drawable.ic_launcher)
Drawable icDraw;

1.3 注入extra
页面间数据传递也可以注入的
下面代码相当于getIntent().getStringExtra("str");

//接受传入的字符串
@InjectExtra(name="str",def="默认值")
String extra;

Integer,Long,Float,Double,Boolean(特殊的JSONObject,JSONArray,其他bean对象都能传)
这里需要特殊说明一下不能使用int,long,float,double因为他们有默认值,注入时发现有值会滤过的
如果有默认值请写到def属性下,
特殊的JSONObject,JSONArray和bean对象是特殊强制转换的结果,传入的对象都还string类型

传入时
it.putExtra("jo", "{name:'我是json字符串'}");
it.putExtra("array", "[{name:'我是json数组'}]");
it.putExtra("bean", "{name:'我是json字符串'}");
接受时
@InjectExtra(name="jo")
JSONObject extrajo;
@InjectExtra(name="array")
JSONArray extraarray; @InjectExtra(name="bean")
User extrauser;

1.4 注入assert
@InjectAssert主要是用来注入assert中的文件的

下面代码可以注入assert文件夹下面的testtext.json的文本内容

@InjectAssert(path="testtext.json")
String testassert;

如果你的文本内容本来就是json可以写为

@InjectAssert(path="testtext.json")
JSONObject jo;

我们还能注入文件如

@InjectAssert(path="anzhi.apk")
File apkFile;

因为assert本身不支持文件读写的所以其实先将文件拷贝出去后然后赋值的,文件拷贝时是异步的使用时需要注意文件是否拷贝完成,

可以在需要使用前面的页面就进行一次注入(文件只会拷贝一次)

Fragment 中使用 如果你不是继承自BaseActivity,你需要在setContentView()后调用 InjectUtil.inject(this);
如果你在Fragment 中使用,需要在onActivityCreated方法中调用 InjectUtil.inject(this);
同时还可以在自定义View中使用,也是InjectUtil.inject(this);
其实BaseActivity里面很简单的

关于类继承问题
继承类时
父类中的 只有有共有属性,即public的属性才能被注入

dhroid - ioc基础(@Inject*)的更多相关文章

  1. dhroid - dhroid ioc模块对 加密混淆问题

    大家应该已经看过ioc的知识在ioc基础中中视图事件都是通过注解实现的问题1如果有某个属性只声明了一下,其他代码没有引用由于混淆时会进行属性优化,将没用的属性去掉,这时需要处理 处理方法:在混淆配置文 ...

  2. Spring笔记:IOC基础

    Spring笔记:IOC基础 引入IOC 在Java基础中,我们往往使用常见关键字来完成服务对象的创建.举个例子我们有很多U盘,有金士顿的(KingstonUSBDisk)的.闪迪的(SanUSBDi ...

  3. Spring 学习笔记 IoC 基础

    Spring IoC Ioc 是什么 IoC -- Inversion of Control(控制反转)什么是控制?什么是反转? 控制反转了什么? 在很早之前写项目不用 Spring 的时候,都是在 ...

  4. dhroid - ioc高级(接口,对象注入)

    下面到了接口对象的注入了解冻吧,现在才是我们的重点,这才是ioc的核心思想,上面的都是android的辅助1.5 对象依赖问题 我们先来将一下对象对象依赖的重要性,很多同学可能只学了android没学 ...

  5. (spring-第2回【IoC基础篇】)Spring的Schema,基于XML的配置

    要深入了解Spring机制,首先需要知道Spring是怎样在IoC容器中装配Bean的.而了解这一点的前提是,要搞清楚Spring基于Schema的Xml配置方案. 在深入了解之前,必须要先明白几个标 ...

  6. IOC基础

    Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...

  7. IoC 之 2.1 IoC基础(壹)

    2.1.1  IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器 ...

  8. (spring-第14回【IoC基础篇】)国际化信息

    国际化又称为本地化. 当你把手机的language由中文切换到英文时,你的微信也相应改用英语,这就是i18n国际化.一般来说,应用软件提供一套不同语言的资源文件,放到特定目录中,应用根据不同语言的操作 ...

  9. (spring-第6回【IoC基础篇】)BeanDefinition——实例化Bean之前的第一大利器。

    上节讲了Bean实例化的内部机制,这里再复述一遍: ResourceLoader从系统中加载XML配置信息,并由Resource来表示. BeanDefinitionReader从Resource中读 ...

随机推荐

  1. windows下更改鼠标滚轮方向

    本来鼠标滚轮的方向无所谓“正确”与否(win下和mac下方向相反),只要习惯即可.但从win下切换到mac后,本来是想把鼠标方向调成跟win下一致,结果这么一反转,连多指手势的“左右”都反了,苹果,算 ...

  2. win上的某个端口是否开启

    1.添加Telnet服务 控制面板-->程序-->打开或关闭windows功能 2.配置Telnet为自动并开启服务 计算机-->服务和应用程序-->服务 3.telnet - ...

  3. tomcat部署会碰到的问题

    nginx转发丢失session的问题 问题描述: 在Nginx配置反向代理的时候,需要将一个特定的URL请求转发到一个带有页面的Web后台管理系统.部署完成之后发现该后管系统无法正常登陆,输入正确账 ...

  4. javascript的闭包计数器实现,python实现各种方法来实现计数器

    菜鸟教程的javascript闭包章节中,演示了js计数器的实现.    教程地址 http://www.runoob.com/js/js-function-closures.html 代码1 var ...

  5. PopupWindow错误:PopupWindow$1.onScrollChanged 出现 NullPointerException和PopupViewContainer.dispatchKeyEvent 出现 NullPointerException【转载】

    PopupWindow错误:PopupWindow$1.onScrollChanged 出现 NullPointerException和PopupViewContainer.dispatchKeyEv ...

  6. 7 -- Spring的基本用法 -- 11... 基于XML Schema的简化配置方式

    7.11 基于XML Schema的简化配置方式 Spring允许使用基于XML Schema的配置方式来简化Spring配置文件. 7.11.1 使用p:命名空间简化配置 p:命名空间不需要特定的S ...

  7. Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL

    Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL >>>>>>>>>>>>> ...

  8. centos7 python3.5中引入sqlite3

    在centos系统中创建Django app,报错如下: django.core.exceptions.ImproperlyConfigured: Error loading either pysql ...

  9. [SublimeText] Sublime Text 2 在 Ubuntu 上安装指南

    1. 下载Sublime Text 2 在官网下载对应系统位数的版本,从压缩包中提取出源代码,解压后文件夹中的"sublime_text"双击即可直接运行. 2. 建立快捷链接 将 ...

  10. Kafka 0.11客户端集群管理工具AdminClient

    很多用户都有直接使用程序API操作Kafka集群的需求.在0.11版本之前,kafka的服务器端代码(即添加kafka_2.**依赖)提供了AdminClient和AdminUtils可以提供部分的集 ...