[Editor] Leverage Spring Framework to work as DI container

This commit is contained in:
2021-02-04 08:17:44 +01:00
parent 7a5ba2c4e2
commit db55743aed
5 changed files with 32 additions and 2 deletions

View File

@@ -1,6 +1,8 @@
plugins { plugins {
id 'org.jetbrains.kotlin.jvm' version '1.4.10' id 'org.jetbrains.kotlin.jvm' version '1.4.10'
id 'org.openjfx.javafxplugin' version '0.0.8' id 'org.openjfx.javafxplugin' version '0.0.8'
id 'org.springframework.boot' version "$springBootVersion"
id 'io.spring.dependency-management' version "$springDependencyManagementVersion"
id 'idea' id 'idea'
} }
@@ -35,4 +37,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib" implementation "org.jetbrains.kotlin:kotlin-stdlib"
implementation "no.tornado:tornadofx:${tornadoFxVersion}" implementation "no.tornado:tornadofx:${tornadoFxVersion}"
implementation "org.joml:joml:${jomlVersion}" implementation "org.joml:joml:${jomlVersion}"
// Spring
implementation 'org.springframework.boot:spring-boot-starter'
} }

View File

@@ -1,10 +1,31 @@
package com.bartlomiejpluta.base.editor package com.bartlomiejpluta.base.editor
import com.bartlomiejpluta.base.editor.view.main.MainView import com.bartlomiejpluta.base.editor.view.main.MainView
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.context.ConfigurableApplicationContext
import tornadofx.* import tornadofx.*
import kotlin.reflect.KClass
@SpringBootApplication
open class EditorApp : App(MainView::class) {
private lateinit var context: ConfigurableApplicationContext
class EditorApp : App(MainView::class) override fun init() {
this.context = SpringApplication.run(this.javaClass)
context.autowireCapableBeanFactory.autowireBean(this)
FX.dicontainer = object : DIContainer {
override fun <T : Any> getInstance(type: KClass<T>): T = context.getBean(type.java)
override fun <T : Any> getInstance(type: KClass<T>, name: String): T = context.getBean(name, type.java)
}
}
override fun stop() {
super.stop()
context.close()
}
}
fun main(args: Array<String>) { fun main(args: Array<String>) {
launch<EditorApp>(args) launch<EditorApp>(args)

View File

@@ -2,8 +2,10 @@ package com.bartlomiejpluta.base.editor.controller.map
import com.bartlomiejpluta.base.editor.controller.tileset.TileSetController import com.bartlomiejpluta.base.editor.controller.tileset.TileSetController
import com.bartlomiejpluta.base.editor.model.map.map.GameMap import com.bartlomiejpluta.base.editor.model.map.map.GameMap
import org.springframework.stereotype.Component
import tornadofx.Controller import tornadofx.Controller
@Component
class MapController : Controller() { class MapController : Controller() {
private val tileSetController: TileSetController by inject() private val tileSetController: TileSetController by inject()

View File

@@ -1,8 +1,10 @@
package com.bartlomiejpluta.base.editor.controller.tileset package com.bartlomiejpluta.base.editor.controller.tileset
import com.bartlomiejpluta.base.editor.model.map.tileset.TileSet import com.bartlomiejpluta.base.editor.model.map.tileset.TileSet
import org.springframework.stereotype.Component
import tornadofx.Controller import tornadofx.Controller
@Component
class TileSetController : Controller() { class TileSetController : Controller() {
val tileset = TileSet(resources.image("/textures/tileset.png"), 160, 8) val tileset = TileSet(resources.image("/textures/tileset.png"), 160, 8)
} }

View File

@@ -5,7 +5,7 @@ import com.bartlomiejpluta.base.editor.view.fragment.MapFragment
import tornadofx.* import tornadofx.*
class MainView : View() { class MainView : View() {
private val mapController: MapController by inject() private val mapController: MapController by di()
private val mapFragment = find<MapFragment>() private val mapFragment = find<MapFragment>()
override val root = borderpane { override val root = borderpane {