我想知道会发生什么,如果我有一个有耳朵和战争的应用程序,并且在每个类名为“Test”的类中? 它是罐头地狱吗? 首先加载哪些类(来自耳朵或来自战争)? 请把我送到某个地方,在那里我可以更详细地了解这个棘手的案例。
答案 0 :(得分:1)
Servlet容器通常使用one-classloader-per-webapp策略来避免这种地狱。因此,如果您在同一容器上部署了两个应用程序,那么将具有不同的类加载器,以满足其类解析和加载需求。 Tomcat has a document for this
当然,有一些问题,比如使用JDBC驱动程序(每个JVM进程一个)和JNI(给定的JVM不能被给定的JVM加载多次或者某些东西)工作依旧。
答案 1 :(得分:0)
你必须使用包裹。 com.foo.Test
与com.foo2.Test
不同。