依赖注入与配置
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 可向已有对象注入字段。