Examples of using Injekt (#5519)

This commit is contained in:
Graham Cox 2018-10-29 21:04:07 +00:00 committed by Grzegorz Piwowarek
parent c028c40079
commit d7bbfb353d
6 changed files with 230 additions and 0 deletions

View File

@ -61,6 +61,11 @@
<version>3.3.0</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>uy.kohesive.injekt</groupId>
<artifactId>injekt-core</artifactId>
<version>1.16.1</version>
</dependency>
</dependencies>
<properties>

View File

@ -0,0 +1,60 @@
package com.baeldung.injekt
import org.slf4j.LoggerFactory
import uy.kohesive.injekt.*
import uy.kohesive.injekt.api.*
import java.util.*
class DelegateInjectionApplication {
companion object : InjektMain() {
private val LOG = LoggerFactory.getLogger(DelegateInjectionApplication::class.java)
@JvmStatic fun main(args: Array<String>) {
DelegateInjectionApplication().run()
}
override fun InjektRegistrar.registerInjectables() {
addFactory {
val value = FactoryInstance("Factory" + UUID.randomUUID().toString())
LOG.info("Constructing instance: {}", value)
value
}
addSingletonFactory {
val value = SingletonInstance("Singleton" + UUID.randomUUID().toString())
LOG.info("Constructing singleton instance: {}", value)
value
}
addSingletonFactory { App() }
}
}
data class FactoryInstance(val value: String)
data class SingletonInstance(val value: String)
class App {
private val instance: FactoryInstance by injectValue()
private val lazyInstance: FactoryInstance by injectLazy()
private val singleton: SingletonInstance by injectValue()
private val lazySingleton: SingletonInstance by injectLazy()
fun run() {
for (i in 1..5) {
LOG.info("Instance {}: {}", i, instance)
}
for (i in 1..5) {
LOG.info("Lazy Instance {}: {}", i, lazyInstance)
}
for (i in 1..5) {
LOG.info("Singleton {}: {}", i, singleton)
}
for (i in 1..5) {
LOG.info("Lazy Singleton {}: {}", i, lazySingleton)
}
}
}
fun run() {
Injekt.get<App>().run()
}
}

View File

@ -0,0 +1,37 @@
package com.baeldung.injekt
import org.slf4j.LoggerFactory
import uy.kohesive.injekt.*
import uy.kohesive.injekt.api.*
class KeyedApplication {
companion object : InjektMain() {
private val LOG = LoggerFactory.getLogger(KeyedApplication::class.java)
@JvmStatic fun main(args: Array<String>) {
KeyedApplication().run()
}
override fun InjektRegistrar.registerInjectables() {
val configs = mapOf(
"google" to Config("googleClientId", "googleClientSecret"),
"twitter" to Config("twitterClientId", "twitterClientSecret")
)
addPerKeyFactory<Config, String> {key -> configs[key]!! }
addSingletonFactory { App() }
}
}
data class Config(val clientId: String, val clientSecret: String)
class App {
fun run() {
LOG.info("Google config: {}", Injekt.get<Config>("google"))
LOG.info("Twitter config: {}", Injekt.get<Config>("twitter"))
}
}
fun run() {
Injekt.get<App>().run()
}
}

View File

@ -0,0 +1,46 @@
package com.baeldung.injekt
import org.slf4j.LoggerFactory
import uy.kohesive.injekt.*
import uy.kohesive.injekt.api.*
class ModularApplication {
class ConfigModule(private val port: Int) : InjektModule {
override fun InjektRegistrar.registerInjectables() {
addSingleton(Config(port))
}
}
object ServerModule : InjektModule {
override fun InjektRegistrar.registerInjectables() {
addSingletonFactory { Server(Injekt.get()) }
}
}
companion object : InjektMain() {
private val LOG = LoggerFactory.getLogger(Server::class.java)
@JvmStatic fun main(args: Array<String>) {
ModularApplication().run()
}
override fun InjektRegistrar.registerInjectables() {
importModule(ConfigModule(12345))
importModule(ServerModule)
}
}
data class Config(
val port: Int
)
class Server(private val config: Config) {
fun start() {
LOG.info("Starting server on ${config.port}")
}
}
fun run() {
Injekt.get<Server>().start()
}
}

View File

@ -0,0 +1,48 @@
package com.baeldung.injekt
import org.slf4j.LoggerFactory
import uy.kohesive.injekt.*
import uy.kohesive.injekt.api.*
import java.util.*
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
class PerThreadApplication {
companion object : InjektMain() {
private val LOG = LoggerFactory.getLogger(PerThreadApplication::class.java)
@JvmStatic fun main(args: Array<String>) {
PerThreadApplication().run()
}
override fun InjektRegistrar.registerInjectables() {
addPerThreadFactory {
val value = FactoryInstance(UUID.randomUUID().toString())
LOG.info("Constructing instance: {}", value)
value
}
addSingletonFactory { App() }
}
}
data class FactoryInstance(val value: String)
class App {
fun run() {
val threadPool = Executors.newFixedThreadPool(5)
for (i in 1..20) {
threadPool.submit {
val instance = Injekt.get<FactoryInstance>()
LOG.info("Value for thread {}: {}", Thread.currentThread().id, instance)
TimeUnit.MILLISECONDS.sleep(100)
}
}
threadPool.awaitTermination(10, TimeUnit.SECONDS)
}
}
fun run() {
Injekt.get<App>().run()
}
}

View File

@ -0,0 +1,34 @@
package com.baeldung.injekt
import org.slf4j.LoggerFactory
import uy.kohesive.injekt.*
import uy.kohesive.injekt.api.*
class SimpleApplication {
companion object : InjektMain() {
private val LOG = LoggerFactory.getLogger(Server::class.java)
@JvmStatic fun main(args: Array<String>) {
SimpleApplication().run()
}
override fun InjektRegistrar.registerInjectables() {
addSingleton(Config(12345))
addSingletonFactory { Server(Injekt.get()) }
}
}
data class Config(
val port: Int
)
class Server(private val config: Config) {
fun start() {
LOG.info("Starting server on ${config.port}")
}
}
fun run() {
Injekt.get<Server>().start()
}
}