Skip to content

依赖注入与配置

DI 模块提供 Bean 注册、创建、查找和注入,并同时承担配置读取职责。

标准注入

Rain 使用 javax.inject 注解:

kotlin
class OrderService(
    private val repository: OrderRepository,
) {
    @Inject
    @Named("audit")
    lateinit var auditLogger: Logger
}
  • Kotlin 类默认使用公开主构造器进行注入,无需标记 @Inject,也无需显式书写 constructor
  • @Inject 可用于显式选择其他构造器,也可用于字段或参数。
  • @Named 选择命名实例;默认实例名为空字符串。
  • Java 类或具有多个特殊构造路径的类型,可以使用 @Inject 明确指定注入构造器。

配置注入

使用 rain.di.Config 将配置项转换为目标类型:

kotlin
class ServerOptions {
    @Config("server.port")
    var port: Int = 8080
}

也可通过 ConfigManager 主动读取:

kotlin
val port = configManager.getConfig("server.port", Int::class.java)
val hosts = configManager.getArray("server.hosts", String::class.java)

Kotlin 委托

模块提供 inject<T>()config<T>() 属性委托。它们依赖 Rain 的 Kotlin 类增强支持,应通过完整启动器运行:

kotlin
var service by inject<UserService>()
var port by config<Int>("server.port")

DiContext

kotlin
val service = context.getBean(UserService::class.java)
context.putBean(Cache::class.java, "local", localCache)
val fresh = context.newBean(TaskHandler::class.java)
context.injectBean(existingObject)

getBean 获取容器管理实例,newBean 创建新实例,injectBean 可向已有对象注入字段。

基于 Apache License 2.0 发布