【0】README

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/PacosonSWJTU/article/details/51076989

【0】README

0.1)本文主要对类加载器进行分析,且 URLClassLoader是 ClassLoader的子类;

0.2)关于如何设置类加载器的加载路径,参见 对servlet容器的补充

【1】URLClassLoader类加载器

1.1)URLClassLoader的一种加载方式

 
  1. package com.tomcat.classloader;

  2.  
  3. import java.io.File;

  4. import java.lang.reflect.Constructor;

  5. import java.lang.reflect.Method;

  6. import java.net.URL;

  7. import java.net.URLClassLoader;

  8.  
  9. public class URLClassLoaderTest {

  10.  
  11. public final static String dir = System.getProperty("user.dir") + File.separator + "src" + File.separator;

  12. public static void main(String[] args) throws Exception {

  13.  
  14. // Getting the jar URL which contains target class

  15. URL[] classLoaderUrls = new URL[]{new URL("file:" + dir)};

  16.  
  17. // Create a new URLClassLoader

  18. URLClassLoader urlClassLoader = new URLClassLoader(classLoaderUrls);

  19.  
  20. // Load the target class

  21. Class<?> beanClass = urlClassLoader.loadClass("com.tomcat.test.Bean");

  22.  
  23. // Create a new instance from the loaded class

  24. Constructor<?> constructor = beanClass.getConstructor();

  25. Object beanObj = constructor.newInstance();

  26.  
  27. // Getting a method from the loaded class and invoke it

  28. Method method = beanClass.getMethod("sayHello");

  29. method.invoke(beanObj);

  30. }

  31. }

 
  1. package com.tomcat.test;

  2.  
  3. public class Bean {

  4.  
  5. public void sayHello() {

  6. System.out.println("Hello from loaded Bean class for test!!!");

  7. }

  8. }

1.2)URLClassLoader的另一种加载方式

 
  1. package com.tomcat.classloader;

  2.  
  3. import java.io.File;

  4. import java.lang.reflect.Constructor;

  5. import java.lang.reflect.Method;

  6. import java.net.MalformedURLException;

  7. import java.net.URL;

  8. import java.net.URLClassLoader;

  9.  
  10. public class URLClassLoaderTest {

  11. public final static String dir = System.getProperty("user.dir") +

  12. File.separator + "webroot" + File.separator;

  13. public static void main(String[] args) {

  14. try {

  15. File file = new File(dir);

  16. URL url = file.toURI().toURL(); // attend this line

  17. URL[] urls = new URL[]{url};

  18. URLClassLoader loader = new URLClassLoader(urls, null, null);

  19. System.out.println("test = " + loader.getURLs()[0].toString());

  20.  
  21. Class<?> beanClass = loader.loadClass("servlet.Bean");

  22. Object obj = beanClass.newInstance();

  23. Method method = beanClass.getMethod("sayHello");

  24. method.invoke(obj);

  25. } catch (Exception e) {

  26. e.printStackTrace();

  27. }

  28. }

  29. }

【2】ClassLoader类加载器的加载方式

 
  1. package com.tomcat.test;

  2.  
  3. import java.lang.reflect.Constructor;

  4. import java.lang.reflect.Method;

  5.  
  6. public class ClassLoaderTest {

  7. // 第一种加载类的方式

  8. public static void main1(String[] args) throws Exception {

  9. Class<?> newClass = Class.forName("com.tomcat.classloader.Bean");

  10. Constructor constructor = newClass.getConstructor();

  11. Object obj = constructor.newInstance();

  12. Method method = newClass.getMethod("sayHello");

  13. method.invoke(obj);

  14. }

  15.  
  16. // 第二种加载类的方式

  17. public static void main(String[] args) throws Exception {

  18. ClassLoader loader = Thread.currentThread().getContextClassLoader();

  19. Class<?> newClass = loader.loadClass("com.tomcat.classloader.Bean");

  20. Constructor constructor = newClass.getConstructor();

  21. Object obj = constructor.newInstance();

  22. Method method = newClass.getMethod("sayHello");

  23. method.invoke(obj);

  24. }

  25. }

猜你喜欢

转载自blog.csdn.net/hchhan/article/details/82355793
今日推荐