https://start.insert-koin.io/#/quickstart/android-java

开始

Koin in 5 minutes (5分钟快速入手Koin)

Getting Started (开始)

在Android Java application中使用

这个教程将会告诉你如何使用Koin注入和检索组件来编写一个Android Java application。

Get the code

可以直接在Github上查看项目或者下载zip

🚀 Go to Github or download Zip

配置Gradle

通过如下方式添加 Koin Android 的依赖:

1
2
3
4
5
6
7
8
// Add Jcenter to your repositories if needed
repositories {
jcenter()
}
dependencies {
// Koin for Android
compile "org.koin:koin-android:$koin_version"
}

我们的组件 (Java & Kotlin)

让我们创建一个 HelloRepository 来提供一些数据:

1
2
3
4
5
6
7
interface HelloRepository {
fun giveHello(): String
}

class HelloRepositoryImpl() : HelloRepository {
override fun giveHello() = "Hello Koin"
}

让我们创建一个Java presenter类,来消费这些数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MyJavaPresenter {

private HelloRepository repository;

public MyJavaPresenter(HelloRepository repository) {
this.repository = repository;
}

public String sayHello(){
String hello = repository.giveHello();

return hello+" from "+this;
}

}

编写Koin Module

使用 module 函数来声明一个module。让我们来声明我们的第一个组件:

1
2
3
4
5
6
7
8
val appModule = module {

// single instance of HelloRepository
single<HelloRepository> { HelloRepositoryImpl() }

// Simple Presenter Factory
factory { MyJavaPresenter(get()) }
}

我们将 MyJavaPresenter 类声明成 factory 来让每当我们的Activity需要一个时就创建一个新的对象。

开始使用Koin

现在我们已经有了一个module,我们就可以使用Koin了。打开你的Application类,或者创建一个(不要忘了在你的Manifest.xml中声明它)。然后只需要调用 startKoin() 函数:

1
2
3
4
5
6
7
8
9
10
11
class MyApplication extends Application {

@Override
public void onCreate() {
super.onCreate();
// Start Koin
KoinApplication koin = KoinAndroidApplication.create(this)
.modules(appModule);
startKoin(new GlobalContext(), koin);
}
}

在Java Activity中注入依赖

MyJavaPresenter 组件将会被通过 HelloRepository 实例所创建。为了在我们的Activity中获取到它,就需要使用 by inject() 委托注入器来注入它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// import inject
import static org.koin.java.standalone.KoinJavaComponent.inject;

public class JavaActivity extends AppCompatActivity {

private Lazy<MySimplePresenter> presenter = inject(MySimplePresenter.class);
private Lazy<MyJavaPresenter> javaPresenter = inject(MyJavaPresenter.class);

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple);

//...
}
}

by inject() 函数允许我们在Android组件(Activity, fragment, Service…)运行时再来检索Koin实例。

get() 函数在这可以非延迟的直接检索一个实例。