aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/ClassLoading.scala
blob: 5b097af169ccbf33a10eb471b709fc5de416d40f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)
}