Одиночка
Нашла целых 5 способов реализовать паттерн Одиночка: один средствами котлина и четыре - средствами спринга. Котлиновская реализация кстати сразу идет с ленивой инициализацией. Как лучше в реальных проектах делать пока не пойму, если кто знает - дайте знать. По сути - одно и то же, разве что котлиновская не управляется спрингом (и при этом она короче остальных)
object KotlinSingleton {
fun doSomething() = "Hello from KotlinSingleton"
init {
println("init KotlinSingleton")
}
}
@Component
@Scope("singleton")
@Lazy
class SpringLazySingleton {
fun doSomething() ="Hello from SpringLazySingleton"
init {
println("init SpringLazySingleton")
}
}
@Component
@Scope("singleton")
class SpringSingleton {
fun doSomething() = "Hello from SpringSingleton"
init {
println("init SpringSingleton")
}
}
@Configuration
class SingletonConfig {
@Bean
fun springSingletonBean() = SpringSingletonBean()
@Bean
@Lazy
fun springSingletonLazyBean() = SpringSingletonLazyBean()
}
class SpringSingletonBean {
fun doSomething() = "Hello from SpringSingletonBean"
init {
println("init SpringSingletonBean")
}
}
class SpringSingletonLazyBean {
fun doSomething() = "Hello from SpringSingletonLazyBean"
init {
println("init SpringSingletonLazyBean")
}
}
@RestController
class MyController (
val springSingletonBean: SpringSingletonBean,
val springSingleton: SpringSingleton,
val springSingletonLazyBean: ObjectProvider<SpringSingletonLazyBean>,
val springLazySingleton: ObjectProvider<SpringLazySingleton>,
) {
@GetMapping
fun call() = listOf(
springSingletonLazyBean.getObject().doSomething(),
springLazySingleton.getObject().doSomething(),
springSingletonBean.doSomething(),
springSingleton.doSomething(),
KotlinSingleton.doSomething(),
)
}
Ииии зачем ?
А чем еще в такое время заниматься? Не спать же
Здесь что-то на эльфийском
Ножки?