public class MyClassLoader extends WebappClassLoader{
public MyClassLoader(){
System.out.println("无参构造");
}
public MyClassLoader(ClassLoader parent){
super(parent);
System.out.println();
System.out.println("当前现成的加载器"+Thread.currentThread().getContextClassLoader());
System.out.println(getParent());
}
@Override
public Class<?> findClass(String name) throws ClassNotFoundException {
Class<?> clazz=null;
if(name.contains("com.yyd")){
//说明是我自己写的类
try {
clazz=loadbyme(name);
} catch (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CannotCompileException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(clazz!=null){
System.out.println("自己的加载器加载成功");
}
return clazz;
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
if(name.contains("com.yyd")){
return findClass(name);
}else{
return super.loadClass(name);
}
}
private Class<?> loadbyme(String name) throws NotFoundException, CannotCompileException, IOException{
ClassPool pool=ClassPool.getDefault();
CtClass clazz=pool.get(name);
CtMethod[] methods=clazz.getMethods();
String oldname="";
String newname="";
for(CtMethod temp:methods){
oldname=temp.getName();
System.out.println("oldname-------->"+oldname);
newname=oldname+"_123";
System.out.println("newname-------->"+newname);
temp.setName(newname);
}
//写出去
// clazz.writeFile("e:/encryptClass/"+oldname+".class");
return clazz.toClass();
}
}
四月 27, 2016 1:36:04 下午 org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.34 using APR version 1.5.1.
四月 27, 2016 1:36:04 下午 org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
四月 27, 2016 1:36:05 下午 org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized with version OpenSSL 1.0.1q 3 Dec 2015
四月 27, 2016 1:36:05 下午 org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
四月 27, 2016 1:36:05 下午 org.apache.coyote.ajp.AjpAprProtocol init
INFO: Initializing Coyote AJP/1.3 on ajp-8009
四月 27, 2016 1:36:05 下午 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1719 ms
四月 27, 2016 1:36:05 下午 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
四月 27, 2016 1:36:05 下午 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.45
四月 27, 2016 1:36:05 下午 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor aaaa.xml
当前现成的加载器org.apache.catalina.loader.StandardClassLoader@452fe9bf
org.apache.catalina.loader.StandardClassLoader@452fe9bf
四月 27, 2016 1:37:38 下午 org.apache.catalina.core.StandardContext listenerStart
SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at com.yyd.MyClassLoader.loadClass(MyClassLoader.java:64)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4179)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4739)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:803)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:780)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:676)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:602)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:503)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:325)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1069)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:759)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
四月 27, 2016 1:37:38 下午 org.apache.catalina.core.StandardContext listenerStart
SEVERE: Skipped installing application listeners due to previous error(s)
四月 27, 2016 1:37:38 下午 org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
我自己写了一个类加载器,继承了webappclassloader。当类的名字不包含特定字符时,我就用super.loadclass(name)交给webappclassloader处理了,但是报错了