Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

145
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!