众所周知,因为classloader的隔离机制,一个jvm进程可以同时加载两个同名的class,但是如何使用这两个class呢。只能通过拿到class的引用,反射调用吗?
问题背景:系统A接入多家渠道,需要用到渠道的SDK,但是各个渠道的SDK都依赖了相同的加解密class,例如 org.apache.Cipher,但是版本都不一样。如何让这些SDK在一个JVM进程中无障碍使用。
场景和stackeroverflow这个问题一样:Java Classloader - how to reference different versions of a jar
这时候 URLClassLoader 就派上用场了。下面是一个例子
使用方法: