package org.test; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; public class MyMain { protected static String root = "C:\\apps\\aop\\jboss-aop_1.5.2.GA\\lib\\"; protected static String[] aopJars = new String[] {"jboss-aop.jar", "jboss-common.jar", "qdox.jar", "concurrent.jar", "trove.jar", "javassist.jar", "jboss-aspect-library.jar", "bsh-1.3.0.jar"}; private static ArrayList clList = new ArrayList(); private static ParentClassLoader loader; public static void main(String[] args) { for( int i = 0; i < 200; i++ ) { Object o1 = getManager(); System.out.println("--- o" + i + " is " + o1); } } private static ParentClassLoader getParentClassLoader() { if( loader == null ) { URL[] urls = getURLs(); loader = new ParentClassLoader(urls); } return loader; } private static URL[] getURLs() { ArrayList list = new ArrayList(); for( int i = 0; i < aopJars.length; i++ ) { File f = new File(root + aopJars[i]); try { list.add(f.toURL()); } catch( Exception e ) { e.printStackTrace(); } } URL[] urls = (URL[]) list.toArray(new URL[list.size()]); return urls; } private static Object getManager() { ParentClassLoader pcl = getParentClassLoader(); URLClassLoader childLoader = new URLClassLoader(getURLs(), pcl); clList.add(childLoader); try { Class c = childLoader.loadClass("org.jboss.aop.AspectManager"); System.out.println(" c is " + c); Method m = c.getMethod("instance", new Class[0]); System.out.println("m: " + m); Object result = m.invoke(null, null); System.out.println("result1: " + result); Object result2 = m.invoke(null, null); System.out.println("result2: " + result2); return result2; } catch( Exception e ) { e.printStackTrace(); } return null; } protected static class ParentClassLoader extends URLClassLoader { public ParentClassLoader(URL[] urls) { super(urls); } protected Class findClass(String name) throws ClassNotFoundException { if( name.equals("org.jboss.aop.AspectManager") ) throw new ClassNotFoundException(name); return super.findClass(name); } } }