源码位置 : https://github.com/kekxv/AndroidAutoWired
代码下载 : AndroidAutoWired.zip
引入方式: <del>gradle:implementation 'com.github.kekxv:AndroidAutoWired:0.2.1'
</del> (不知道啥子情况,不起作用)
更新记录
- 20201226 增加
Sign
标记,用于区分各个不一样的实例。- 20201226 增加
IAutoWired.registered
手动注册,可用于自动注入Context
之类。
原理说明:
@Service
的自动注入类IAutoWired
自动调用 IAutoWired.inject(this);
进行注入。private
也能注入成功;通过反射以及setAccessible(true);
修改权限进行newInstance()
以及赋值
。Constructor<?> constructor = cla.getDeclaredConstructor();
constructor.setAccessible(true);
constructor.newInstance()
Field[] fields = source.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
field.set(source, target);
}
本项目是用于模拟自动注入,通过添加注解@AutoWired
自动扫描包含@AutoWired
注解对应的实例,并将其注入。
如果变量类型为接口类,则需要有一个对应的继承类对应能初始化,用于注入。
注意:所有自动注入的同类型类,为同一个对象。
为了能够区分对应的自动注入实例 ,则需要添加注解@Service
,方便AutoWired
确认。
先进行@AutoWired
以及 @Service
注解,或者使用IAutoWired.registered
手动注册。
安卓在使用的时候,需要在主入口类里面调用IAutoWired.init(this);
用与初始化扫描本包下所有类。
1
kahlkn 2020-12-28 13:38:58 +08:00
应该考虑的是实现 IOC 容器,在 IOC 容器中考虑 同接口 多实现怎么存怎么区分。 还有 循环依赖 比如 A 依赖 B,但是 B 又依赖 A 怎么解决。 还有 对象初始化 和 懒加载 。我觉得自动注入,仅仅是 IOC 容器中的一个功能。
|