Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java class loader

1,512 views

Published on

Java class loader
eclipse, maven,jetty,spring class loader

Published in: Technology, Education
  • Be the first to comment

Java class loader

  1. 1. Java ClassLoaderjava.lang.ClassNotFoundExceptionXuefeng.Wu
  2. 2. 明明就在这里啊!
  3. 3. ClassNotFoundException
  4. 4. When Class.forName() findSystemClass() loadClass() NoClassDefFoundError: compile timeRun time
  5. 5. Agenda JVM class and execute Core ClassLoader and MyClassLoader Tools: jps, jinfo Eclipse-OSGi Maven Spring Dynamic Classes and Method (Reflect, Java 8) Other: MethodNotDef
  6. 6. Agenda JVM class and execute Core ClassLoader and MyClassLoader Tools: jps, jinfo Eclipse-OSGi Maven Spring Dynamic Classes and Method (Reflect, Java 8) Other: MethodNotDef
  7. 7. Key JVM Components
  8. 8. Agenda JVM class and execute Core ClassLoader and MyClassLoader Tools: jps, jinfo Eclipse-OSGi Maven Spring Dynamic Classes and Method (Reflect, Java 8) Other: MethodNotDef
  9. 9. Default class loadersun.misc.Launcher$ExtClassLoadersun.misc.Launcher$AppClassLoaderCLASSPATH environment variable,-classpath or -cp command line option,Class-Path attribute of Manifest file inside JAR
  10. 10. Tools: jps, jinfo
  11. 11. ClassLoader works
  12. 12. MyClassLoaderDEMO:MyClassLoader
  13. 13. Three principles Delegation principles Visibility Principle Uniqueness PrincipleChild ClassLoader can see class loaded by Parent ClassLoadbut vice-versa is not true.According to this principle a class loaded by Parentshould not be loaded by Child ClassLoader again.DEMO:demo. ExplicitlyLoadClassByExtension
  14. 14. Is it easy?
  15. 15. Agenda JVM class and execute Core ClassLoader and MyClassLoader Tools: jps, jinfo Eclipse-OSGi Maven Spring Dynamic Classes and Method (Reflect, Java 8) Other: MethodNotDef
  16. 16. Eclipse-OSGi
  17. 17. OSGi Class Loader
  18. 18. Demo Run Plugin_ListAll_Normal Jinfo
  19. 19. Demo Debug Plugin_ListAll_Normal
  20. 20. Demo Debug HelloWorld in remote project
  21. 21. Issue & fix Try to find csdm/client/StartUp.class is exist.
  22. 22. Agenda JVM class and execute Core ClassLoader and MyClassLoader Tools: jps, jinfo Eclipse-OSGi Maven Spring Dynamic Classes and Method (Reflect, Java 8) Other: MethodNotDef
  23. 23. Maven System Classloader: Classworlds classloadingframework Core Classloader: Plugin Classloaders Custom Classloadersboot the classloader graph: ${maven.home}/bootdown the graph contains the core requirements ofMaven:${maven.home}/libeach plugin has its own classloaderthat is a child of Mavens core classloaderplugins/plugin
  24. 24. Demo: jetty plugin mvn jetty:run @ remote
  25. 25. a limit on how long you can make yourcommand line Isolaed Classloader: your classpathisnt really correct. try to escape the confines of anisolated classloader. Manifest-Only JAR:your app may be confused if itfinds only our booter.jar there!
  26. 26. Demo: surefire plugin mvn -Dtest=* test
  27. 27. Agenda JVM class and execute Core ClassLoader and MyClassLoader Tools: jps, jinfo Eclipse-OSGi Maven Spring Dynamic Classes and Method (Reflect, Java 8) Other: MethodNotDef
  28. 28. SpringString bean = readerBeanClass()Class clz = classLoader.loadClass(bean)clz .newInstance()
  29. 29. Spring ResourceLoader ClassPathXmlApplicationContext DefaultResourceLoader. setClassLoader(ClassLoader classLoader)XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader();reader.setBeanClassLoader([Class LoaderB here!]);DefaultListableBeanFactory factory = new DefaultListableBeanFactory(reader);reader.loadBeanDefinitions([xml resource here!]);Default: thread context class loader: Thread.currentThread().getContextClassLoader()
  30. 30. Issue & fix
  31. 31. Agenda JVM class and execute Core ClassLoader and MyClassLoader Tools: jps, jinfo Eclipse-OSGi Maven Spring Dynamic Classes and Method (Reflect, Java 8) Other: MethodNotDef
  32. 32. Agenda JVM class and execute Core ClassLoader and MyClassLoader Tools: jps, jinfo Eclipse-OSGi Maven Spring Dynamic Classes and Method (Reflect, Java 8) Other: MethodNotDef
  33. 33. Other: MethodNotDef Jar version
  34. 34. Class.forName(“...HelloWorld")public class com.carestreamhealth.pas.RemoteWS.utils.HelloWorld {public com.carestreamhealth.pas.RemoteWS.utils.HelloWorld();Code:0: aload_01: invokespecial #8 // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]) throws java.lang.ClassNotFoundException;Code:0: ldc #19 // Stringcom.carestreamhealth.pas.RemoteWS.utils.HelloWorld2: invokestatic #21 // Methodjava/lang/Class.forName:(Ljava/lang/String;)Ljava/lang/Class;5: pop6: return}
  35. 35. getClassLoader().loadClass(“..HelloWorld")public class com.carestreamhealth.pas.RemoteWS.utils.HelloWorld {public com.carestreamhealth.pas.RemoteWS.utils.HelloWorld();Code:0: aload_01: invokespecial #8 // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]) throws java.lang.ClassNotFoundException, java.lang.InstantiationException, java.lang.IllegalAccessException;Code:0: ldc #1 // classcom/carestreamhealth/pas/RemoteWS/utils/HelloWorld2: invokevirtual #23 // Methodjava/lang/Class.getClassLoader:()Ljava/lang/ClassLoader;5: ldc #29 // Stringcom.carestreamhealth.pas.RemoteWS.utils.HelloWorld7: invokevirtual #31 // Methodjava/lang/ClassLoader.loadClass:(Ljava/lang/String;)Ljava/lang/Class;10: pop11: return}
  36. 36. new HelloWorldpublic class com.carestreamhealth.pas.RemoteWS.utils.HelloWorld {public com.carestreamhealth.pas.RemoteWS.utils.HelloWorld();Code:0: aload_01: invokespecial #8 // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: new #1 // class com/carestreamhealth/pas/RemoteWS/utils/HelloWorld3: invokespecial #16 // Method "<init>":()V6: return}
  37. 37. Call Site-VM Operation
  38. 38. JVM Spec: 5.3 Creation and Loadinghttp://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html
  39. 39. Dynamic Classes and Method (Reflect, Java8) invokedynamichttp://www.slideshare.net/CharlesNutter/jax-2012-invoke-dynamic-keynote
  40. 40. Java bytecode:Understanding bytecode makes you abetter programmerExample:http://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/Java Class:http://en.wikipedia.org/wiki/Java_class_fileJava bytecodes:http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

×