URLClassLoader例子
学着写一个servlet服务器,里面对servlet的处理就得把那个servlet动态加载进来后,然后再去调用用它的service方法,这样就能实现了用户写的业务了。这里记录一个把类加载入来,然后执行这个类。用URLClassLoader来加载。
首先在src中写一个test类,或接口也可以:
package com.lr.test;public class test {public void show() {System.out.println("test:show()************************");}}
?
写要加载的类(因为这个类应该是用户写的,放在src外的文件夹中,像下图放在webroot文件夹中,
?继承的那个test是在文件夹src里的,就好像Servlet):
import com.lr.test.test;public class MyClass extends test {public void show() {System.out.println("MyClass:show() is test Loader!");}}
写一个测试类:
package com.lr.junit.MyServer02;import java.io.File;import java.net.URL;import java.net.URLClassLoader;import java.net.URLStreamHandler;import junit.framework.TestCase;import com.lr.test.test;public class testClassLoader extends TestCase {public void testLoader() throws Throwable, Exception {URL[] urls = new URL[1];URLStreamHandler streamHandler = null;File classPath = new File(System.getProperty("user.dir")+ File.separator + "webroot");String repository = (new URL("file", null, classPath.getCanonicalPath()+ File.separator)).toString();urls[0] = new URL(null, repository, streamHandler);URLClassLoader loader = new URLClassLoader(urls);// Class<?> myClass = loader.loadClass("MyClass");test t = (test) myClass.newInstance();// 实例化一个对象t.show();}}
?测试结果为:
MyClass:show() is test Loader!
?