前言
KComponent 它来啦. 从 2018.8 开始, Component 项目正式开源. 到目前已经 4 年的时间了. 这几年中, Component 不断升级优化. 最后趋于稳定.
为了组件化框架更好的发展, KComponent 继承了 Component 的优点, 升级为一个纯 Kotlin 的项目. 不再支持 Java, 注解驱动器也升级为 KSP
如果想要兼容 Java, 还请继续使用 Component , 如果你的项目是纯 Kotlin 项目, 请使用 KComponent
KComponent 比 Component 的优点
- 拦截器不再通过 callback 方式, 直接提供 suspend 方法. 这个大家看到就懂了. 可以更方便的在拦截器中写耗时或者并且的代码了
- 拦截器的类上支持 @MainThread 和 @IOThread 注解来决定拦截器默认的执行线程
- 属性注入支持 late init 以及 Nullable 和 NonNull 的属性了
- 支持注入 Uri 参数了
- 注解驱动器从 Annotation 和 Kapt 升级为 Ksp. 编译的速度提升了不少!!!
- 重命名几个有歧义的 callback 的名称.
依赖配置
手动加载 反射 或者 自动加载 ASM 字节码
路由
@RouterAnno(
hostAndPath = "user/login",
)
class LoginAct: AppCompatActivity {
@AttrValueAutowiredAnno
late init name: String
@AttrValueAutowiredAnno("password")
var password1: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Component.inject(target = this)
// xxxxxx
}
}
Router
.with(context)
.hostAndPath("user/login")
.putString("name", "xiaojinzi")
.putString("password", "123456")
.forword()
更多的用法和更详细的解释请查看文档:路由跳转 和 路由标记 @RouterAnno 的使用
服务发现
interface UserSpi {
fun login(name: String, password: String)
}
@ServiceAnno(UserSpi::class)
class UserSpiImpl : UserSpi {
fun login(name: String, password: String) {
// xxxx
}
}
UserSpi::class.service()?.login(name = "xiaojinzi", password = "xxxxxx")
更多的用法和更详细的解释请查看文档:服务发现的使用 和 [服务的装饰增强](