想要删除tomcat重新下过,但是不能删除。显示操作无法完成,因为其中的文件夹或文件已在另一程序中打开。可是我已经把所有的运行的程序都关掉了。还是没有用。我想打开看看,但是需要权限。我怕不安全,所以也不敢点。
我就是重启了一下,然后就可以删除了。
【相关推荐】
打破双亲委派机制需要重写ClassLoader
中的双亲委派方法loadClass
()
打破双亲委派机制代码:
protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
synchronized (getClassLoadingLock(name)) {
// First, check if the class has already been loaded
Class<?> c = findLoadedClass(name);
if (c == null) {
long t0 = System.nanoTime();
if (c == null) {
long t1 = System.nanoTime();
//如果不是这个包下的类,比如Object,使用 自定义类加载器的父亲 >> 应用类加载器,双亲委派
if(!name.startsWith("com.chinalife.policy_manage.user.entity")){
c = this.getParent().loadClass(name);
}else {
//如果是这个包下的类 ,比如User,打破双亲委派机制
c = findClass(name);
}
// this is the defining class loader; record the stats
sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
sun.misc.PerfCounter.getFindClasses().increment();
}
}
if (resolve) {
resolveClass(c);
}
return c;
}
}
5.1 打破双亲委派机制的应用:tomcat
以Tomcat类加载为例,Tomcat
如果使用默认的双亲委派类加载机制行不行?答案是不行的。为什么?
spring4
,另外一个应用依赖的spring5
。spring4和spring5
底层也会依赖大量相同得类,如果按照以前的双亲委派机制,这些相同的类只能存在一份,如果被加载的是spring4
的类,那么当spring5
去使用某个类时,只能加载到spring4
的类,那就可能丢失了spring5
中对这个类的扩展功能。因此要保证每个应用程序的类库都是独立的,保证相互隔离。所以tomcat
需要打破双亲委派机制如果使用默认的类加载器机制,那么是无法加载两个相同类库的不同版本的,默认 的类加器是不管你是什么版本的,只在乎你的全限定类名,并且只有一份。
5.2 Tomcat自定义加载器详解
如上图所示: