aboutsummaryrefslogblamecommitdiff
path: root/kamon-core/src/main/scala/kamon/ClassLoading.scala
blob: 5b097af169ccbf33a10eb471b709fc5de416d40f (plain) (tree)

























                                                                                                  
package kamon

import kamon.util.DynamicAccess

import scala.collection.immutable
import scala.reflect.ClassTag
import scala.util.Try

/**
  *   Utilities for creating instances from fully qualified class names.
  */
trait ClassLoading {
  @volatile private var _dynamicAccessClassLoader = this.getClass.getClassLoader
  @volatile private var _dynamicAccess = new DynamicAccess(_dynamicAccessClassLoader)

  def classLoader(): ClassLoader =
    _dynamicAccessClassLoader

  def changeClassLoader(classLoader: ClassLoader): Unit = synchronized {
    _dynamicAccessClassLoader = classLoader
    _dynamicAccess = new DynamicAccess(_dynamicAccessClassLoader)
  }

  def createInstance[T: ClassTag](fqcn: String, args: immutable.Seq[(Class[_], AnyRef)]): Try[T] =
    _dynamicAccess.createInstanceFor(fqcn, args)
}