java 单例 初始化_单例数据库对象启动时参数化初始化?

该博客探讨了如何在Kotlin中使用object关键字创建一个数据库单例,同时允许在初始化时指定数据库名称。作者通过使用lateinit变量和一个init函数来解决单例对象无法接受参数的问题。在另一个文件中,定义了一个DatabaseContainer类来封装数据库操作。这种方法在应用启动时从属性文件加载数据库名称,然后调用init函数创建单例。博客询问这种方式的有效性和是否存在更好的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在尝试创建一个可供多个类使用的单个数据库实例(在Kotlin中使用 object 关键字) . 但是,我希望能够在创建单例实例之前指定数据库名称 .

由于单个对象无法使用参数进行初始化,因此我想知道我所做的是否有效,或者是否有更好的处理方式:

object DatabaseSingleton {

private lateinit var databaseName: String

private lateinit var mongoClient: MongoClient

val database: DatabaseContainer by lazy {

DatabaseContainer(databaseName, mongoClient)

}

fun init(databaseName: String, mongoClient: MongoClient): DatabaseSingleton {

this.databaseName = databaseName

this.mongoClient = mongoClient

return this

}

}

在另一个文件中

class DatabaseContainer(databaseName: String, val mongoClient: MongoClient) {

val db: MongoDatabase = mongoClient.getDatabase(databaseName)

val table: MongoCollection = db.getCollection(TABLE_NAME)

}

基本上,我通过对数据库容器使用延迟初始化来封装单个对象中的"database container",并提供lateinit vars来指定数据库名称并在singleton对象中具有初始化函数来初始化数据库容器 . 这是在我第一次启动应用程序时的主要方法中,我可以从一些本地属性文件加载数据库名称并调用 val database = DatabaseSingleton.init("DATABASE_NAME", client) 来创建需要多个其他类访问的数据库单例 .

这是一个做我想做的好方法,还是有更好的做事方式?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值