All Downloads are FREE. Search and download functionalities are using the official Maven repository.

micromix.boot.spring.SpringBootSupport.scala Maven / Gradle / Ivy

There is a newer version: 0.8
Show newest version
package micromix.boot.spring

import java.util.{List => JList, Map => JMap, Collections}
import Collections._

import scala.collection.JavaConversions._
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory
import org.springframework.context.ApplicationContext
import org.springframework.boot.builder.ParentContextApplicationContextInitializer

trait SpringBootSupport {

  // Members

  protected var context: ApplicationContext = _

  protected val cachedProperties = properties

  // Configuration callbacks

  protected def properties: JMap[String, Any] =
    emptyMap()

  protected def parentContext: ApplicationContext = null

  protected def isWebApp: Boolean =
    false

  // Beans configuration callbacks

  def configurationClasses: JList[Class[_]] =
    emptyList()

  def namedBeansDefinitions: JMap[String, Class[_]] =
    emptyMap()

  def singletons: JList[_] =
    emptyList()

  // Initialization

  def initialize() {
    val microMixApplicationBuilder = new MicroMixApplicationBuilder().web(isWebApp)
    val applicationBuilder = microMixApplicationBuilder.toSpringApplicationBuilder
    applicationBuilder.sources(configurationClasses: _*)
    Option(parentContext).foreach(parent => applicationBuilder.initializers(new ParentContextApplicationContextInitializer(parent)))
    cachedProperties.foreach(property => System.setProperty(property._1, property._2.toString))
    applicationBuilder.initializers(new AnnotatedBeanDefinitionApplicationContextInitializer(namedBeansDefinitions))
    context = applicationBuilder.run()
    context.getBeansOfType(classOf[BootCallback]).values().foreach(_.afterBoot())
    singletons.foreach {
      bean =>
        val beanRegistry = context.getAutowireCapableBeanFactory.asInstanceOf[ConfigurableListableBeanFactory]
        beanRegistry.autowireBean(bean)
        beanRegistry.registerSingleton(generateBeanName(bean), bean)
    }
  }

  def autowire() {
    context.getAutowireCapableBeanFactory.autowireBean(this)
  }

  protected def generateBeanName(bean: Any) =
    bean.getClass.getName

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy