依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。
具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者实例的工作通常由spring容器来完成,然后注入调用者,因此也称为依赖注入。DI
依赖注入框架的优点:
依赖注入库会自动释放不再使用的对象,减少资源的过度使用。
在指定范围内,可重用依赖项和创建的实例,提高代码的可重用性,减少了很多模板代码。
代码变得更具可读性。
易于构建对象。
编写低耦合代码,更容易测试.
AndroID端常用DI框架
Dagger2/Hilt
Koin
框架 | 优点 | 缺点 |
---|---|---|
dagger2/Hilt | Google加持,社区广泛,性能佳 | 难上手,编译慢,编译错误晦涩,kotlin、androID支持不简洁(代码量大) |
Koin | 易上手、易调试、编译快、代码少,jetpack/Kotiln支持棒 | 性能不及dagger2/Hilt,java兼容不足,社区小 |
...... |
依赖包的添加
//1、在project的build.gradle下,buildScript的dependencIEs添加 classpathbuildscript { repositorIEs { jcenter() } dependencIEs { classpath "org.koin:koin-gradle-plugin:$koin_version" }}//2、应用koin插件apply plugin: 'koin'
//3、在各自module的build.gralde 的dependencIEs添加依赖包// Koin for Kotlinimplementation "org.koin:koin-core:$koin_version"implementation "org.koin:koin-core-ext:$koin_version"// Koin for AndroIDimplementation "org.koin:koin-androID:$koin_version"implementation "org.koin:koin-androID-scope:$koin_version"implementation "org.koin:koin-androID-viewmodel:$koin_version"implementation "org.koin:koin-androID-ext:$koin_version"//koin for AndroIDx 基本二选一即可implementation "org.koin:koin-androIDx-scope:$koin_version"implementation "org.koin:koin-androIDx-viewmodel:$koin_version"implementation "org.koin:koin-androIDx-fragment:$koin_version"implementation "org.koin:koin-androIDx-ext:$koin_version"testImplementation "org.koin:koin-test:$koin_version"
1 、简单使用 三步走
业务
class
的创建定义
koin
的容器模块module
,内部声明类的创建(单例、工厂等)在
Application
调用stratKoin
内部初始化modules
关键函数符号
startKoin
module
single
factory
viewmodel
fragment
by inject()/get()
,前者在AndroID的运行时组件(AFSC)有效
by vIEmwodel()/getviewmodel()
named()
//限定标示符,string和type
bind
类似于类型扩展,接口实现,通过get<T>获取,泛型时候,koin.bind(T,instance)来获取,另有getAll()
无参构造,单参数构造
多构造函数,需要使用qualifIErs
限定符号
single单例的scope,factory是新建对象 的scope,可以自定scope
外部参数的构造函数,初始化可用表达式构造如:(vIEw:VIEw)->VIEwInfo(vIEw)
,使用方get/inject时候,接收参数使用parametersOf()
、、最多5个参数
普通类使用koin注解,需要实现KoinComponent
接口
跨模块module的使用依旧如是
getProperty获取配置file的Property属性,androID是androIDfilePropertIEs
组件化开发中,可使用外部加载 loadKoinModule在startKoin之外 *** 作。
Activity/Fragment默认扩展了scope字段
附注:
在startKoin中androIDLogger注意添加参数Level.error,否则可能报错(这是个BUG)
使用by lazy
的时候,注意加载顺序,不要和别人比懒,可能别人比你更懒!
在module中不要空的函数块
多次重复声明某个对象,需要overrIDe
注意inject/viewmodel等函数符号的导包,别弄错
koin适用于androID ,java,所以注意区分
总结以上是内存溢出为你收集整理的依赖注入框架Koin(一)知识预览全部内容,希望文章能够帮你解决依赖注入框架Koin(一)知识预览所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)