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本身不支持文件读写的所以其实先将文件拷贝出去后然后赋值的,文件拷贝时是异步的使用时需要注意文件是否拷贝完成,
可以在需要使用前面的页面就进行一次注入(文件只会拷贝一次)
开源中国地址:http://www.oschina.net/p/dhroid
相关推荐
Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...
华为智慧城市之智能运行中心(ioc)[2021-04-22](48页).pdf
Spring IoC简单示例,使用注解配置依赖注入,使用Maven构建项目 Maven使用及SpringIoC教程参考我的Blog:http://blog.csdn.net/boyazuo
Spring IoC简单示例,使用XML配置依赖注入,使用Maven构建项目 Maven使用及Spring IoC教程参考我的Blog:http://blog.csdn.net/boyazuo
Spring Ioc源码分析系列--自动注入循环依赖的处理.doc
雷泰IOC-0640控制卡用户手册V1.3
【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 ) https://hanshuliang.blog.csdn.net/article/details/120404805 博客源码快照
本书详细介绍了以JSP 2、Struts 2、Spring 2.5、Hibernate 3.2、AJAX等主流JavaEE技术进行优化组合开发高性能大型门户网站的实践经验。针对读者的不同学习阶段,共分技术篇、实践篇与部署篇三大部分进行循序渐进地...
该实用程序及其资源对FireEye Mandiant调查期间收集到的危害指标进行编码。 要了解更多信息,请。 总之,该实用程序将: 尽最大努力确定现有的妥协。 它不会: 在100%的时间内确定折衷方案,或 告诉您设备是否...
NULL 博文链接:https://samter.iteye.com/blog/408519
spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和...
文档地址:...-Spring Controller##### 基于MVC模式- 视图--Jsp- 模型--JavaBean- 业务层--JavaBean##### 主要技术- Spring Ioc- Mybatis+Spring整合- 声明式事务- Spring标签库- Spring拦截器
今天有空,写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了...
IOC 基于 注解方式 实现---------------------- 半自动化配置 Spring 提供以下 四个注解 修饰类 @Service: 一般用来修饰 业务service层 @Repository: 一般用来修饰 数据访问dao层 @Component: 当一个类 , 分不清...
Ioc模式解析 - JAVA - 技术天地 - 赛迪网.htm
3. 如果一切正常,你会看到使用Java集合、XML API,以及反射技术模拟Spring的get注入和自定义的IoC容器实现的例子--get注入了Hello类和一个MyFrame类,并且实例化之后可以运行! 4. 看一下testDemoSpringDI()方法,...
Spring Ioc源码分析系列--@Autowired注解的实现原理.doc
2.1构造函数注入:先去容器中找到该接口的实现类型。然后遍历该实现类型的构造函数中的参数。首先找有特性标记的。如果没有特性就找构造参数最多的那个构造函数。然后对这个构造函数里的参数进行实例化。如果该...
IoC 依赖注入 技术总结 IoC 依赖注入 技术总结
PCI并口卡 PCI转打印并口DB25接口扩展卡 IOC835芯片驱动 功能描述: 在具备PCI插槽的电脑上扩展出1个DB25并口 规格说明: 符合PCIRev2.1协议 传输率最大可达1.5 Mbytes/sec 1个DB25并口接头 符合标准的带16byte接收...