源码位置 : https://github.com/kekxv/AndroidAutoWired
代码下载 : AndroidAutoWired.zip
API 文档参照 API。
仓库 : Repo 。
引入方式 : Introduce
使用方式 : Usage
更新记录
20210127 修复
interface
接口包含变量没有注入问题。20210126 修复重复依赖陷入无限回调的问题。
20210126 增加
Interpretation
用于 多个interface
继承类型判断注入对象。20210124 修复重复依赖陷入无限回调的问题。
20210124 增加
InjectView
自动findViewById
并赋值;需要setContentView
之后调用。20210114 增加
Service
内service
标记,用于开启调用start()
。20210114 自动注入后注入,可在更新之后自动注入之前未找到的注入字段。
20210114 在原有自动扫描的基础上,增加手动传入
Service
类。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
,举个例子:Usage
注意:所有自动注入的同类型类,为同一个对象。
为了能够区分对应的自动注入实例 ,则需要添加注解@Service
,方便AutoWired
确认。
DexFile
已经被 API 29
以上列为过时(Deprecated
),这个在扫描当前类时候用上,需要寻找一个替换方案。不过在虚拟机Android11
上面能够正常使用。仿 springboot @Autowired 自动注入:https://blog.csdn.net/qq_38527695/article/details/104217397
其他互联网文档
备注:由于找资料比较多和杂,部分资料查看后关闭页面,导致没有加入到参考文档内,如果您发现本文章内有借鉴您的文档的部分,请将您的文献地址提交Issues
或者提交 PR(pull requests
)到https://github.com/kekxv/AndroidAutoWired
1
kwanzaa 2021-01-27 22:40:47 +08:00
参考学习下。Kotlin OK 吗?
|
2
twoyuan 2021-01-27 22:58:55 +08:00
为什么不用主流的 Dagger 或者 Koin 呢
Dagger 现在一有 Hilt API 提高易用性,二有 Android Studio 官方插件支持的跳转; Kotlin 下有 Koin,API 足够简洁易用,并且对 Java 支持也很好 |
3
kekxv OP |