Koin-5-Android_Java

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() 函数在这可以非延迟的直接检索一个实例。