Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

151
Vistas
Qué cargador de clases cargó una clase de la instancia proporcionada

En el entorno JEE, es útil saber desde dónde se carga una clase en particular.

Por ejemplo, tengo una instancia de org.slf4j.Logger proporcionada por una biblioteca de caja negra. ¿Es posible encontrar el cargador de clases responsable? ¿Si la clase de la instancia proviene de JDK, servidor de aplicaciones, EAR o cargador de clases de aplicaciones web?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Resulta ser bastante simple. El nombre del cargador de clases es devuelto por:

 object.getClass().getClassLoader().getName()

Devuelve algo como "aplicación" o "plataforma". Tenga cuidado: el cargador de clases es null , si la clase pertenece al cargador de clases de arranque, como lo hace el registrador JUL java.util.logging.Logger .

WebLogic tiene una larga cadena de cargadores de clases sin nombres. Los cargadores de clases de WebLogic contienen una annotation de campo útil. Uno puede leerlo para encontrar la aplicación JEE, el cargador de clases pertenece a:

 public Object getAnnotation(ClassLoader classloader) { try { Method amethod = classloader.getClass().getMethod("getAnnotation"); return amethod.invoke(classloader); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { return ""; } }

Si desea imprimir una descripción general de todos los cargadores de clases disponibles sin buscar anotaciones, se puede usar el código hash de la instancia del cargador de clases. Aquí hay una pequeña página JSP. webapp en el directorio de aplicaciones web de su proyecto web para obtener una descripción general rápida.

 <% response.setContentType("text/plain"); List<Class<?>> clazzes = List.of(Logger.class, object.getClass()); out.println("CLASSLOADERS:\n"); ClassLoader classloader = new Object() {}.getClass().getClassLoader(); while (classloader != null) { out.println( String.format("%-18s", classloader.getName()) + " " + String.format("%-10s", Integer.toHexString(classloader.hashCode())) + " " + classloader.getClass().getName() + " / " + getAnnotation(classloader)); classloader = classloader.getParent(); } out.println("\nCLASSES:\n"); for (Class<?> clazz : clazzes) { ClassLoader cloader = clazz.getClassLoader(); URL location = Optional.of(clazz.getProtectionDomain()).map(x->x.getCodeSource()).map(x->x.getLocation()).orElse(null); out.println( clazz + " \n " + (cloader != null ? Integer.toHexString(cloader.hashCode()) : "<bootstrap>") + "\t" + location); } %>
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda