mirror of
https://github.com/tursom/TursomServer.git
synced 2025-03-13 11:20:10 +08:00
添加 ClassLoaderUtil
This commit is contained in:
parent
fa4202e2d1
commit
9f1b852976
6
log/src/main/kotlin/cn/tursom/log/Slf4jEnhance.kt
Normal file
6
log/src/main/kotlin/cn/tursom/log/Slf4jEnhance.kt
Normal file
@ -0,0 +1,6 @@
|
||||
package cn.tursom.log
|
||||
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
inline fun <reified T> LoggerFactory.getLogger(): Logger = LoggerFactory.getLogger(T::class.java)
|
@ -6,6 +6,10 @@ import java.net.URLClassLoader
|
||||
import java.util.ArrayList
|
||||
import java.util.jar.JarFile
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val ClassLoader.classes: List<Class<*>>
|
||||
get() = ClassLoaderUtil.classes.get(this) as List<Class<*>>
|
||||
|
||||
fun ClassLoader.getClassByPackage(
|
||||
packageName: String,
|
||||
childPackage: Boolean = true
|
||||
@ -17,6 +21,8 @@ inline fun <reified T> T.getClassByPackage(
|
||||
): List<String> = ClassLoaderUtil.getClassByPackage(packageName, childPackage, T::class.java.classLoader)
|
||||
|
||||
object ClassLoaderUtil {
|
||||
internal val classes = ClassLoader::class.java.getDeclaredField("classes").also { it.isAccessible = true }
|
||||
|
||||
/**
|
||||
* 获取某包下所有类
|
||||
* @param packageName 包名
|
||||
@ -129,7 +135,7 @@ object ClassLoaderUtil {
|
||||
if (urlPath.endsWith("classes/")) {
|
||||
continue
|
||||
}
|
||||
val jarPath = "$urlPath!/$packagePath"
|
||||
val jarPath = "$urlPath/$packagePath"
|
||||
myClassName.addAll(getClassNameByJar(jarPath, childPackage))
|
||||
}
|
||||
return myClassName
|
||||
|
28
src/main/kotlin/cn/tursom/core/ListClassLoader.kt
Normal file
28
src/main/kotlin/cn/tursom/core/ListClassLoader.kt
Normal file
@ -0,0 +1,28 @@
|
||||
package cn.tursom.core
|
||||
|
||||
import java.net.URL
|
||||
import java.net.URLClassLoader
|
||||
|
||||
|
||||
@Suppress("unused")
|
||||
class ListClassLoader(url: Array<out URL>, parent: ClassLoader? = null) : URLClassLoader(url, parent) {
|
||||
private val parentList = ArrayList<ClassLoader>()
|
||||
val parents: List<ClassLoader> get() = parentList
|
||||
|
||||
fun addParent(parent: ClassLoader) = parentList.add(parent)
|
||||
fun removeParent(parent: ClassLoader) = parentList.remove(parent)
|
||||
|
||||
override fun findClass(name: String?): Class<*> {
|
||||
try {
|
||||
return super.findClass(name)
|
||||
} catch (e: ClassNotFoundException) {
|
||||
}
|
||||
parentList.forEach {
|
||||
try {
|
||||
return it.loadClass(name)
|
||||
} catch (e: ClassNotFoundException) {
|
||||
}
|
||||
}
|
||||
throw ClassNotFoundException(name)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user