java的SPI(ServiceProviderInterface)机制,通过线程上下文类加载器打破类加载的双亲委派模型,达到动态加载外部实现的目的。 是一个非常优秀的设计,我这里写个简单示例体验一下。 需要注意的是:不可以使用内部类接口、内部类实现。 示例代码 publicstaticvoidmain(String〔〕args){ ServiceLoadertSPIInterLoaderServiceLoader。load(SPIInter。class); for(SPIIntertSPIInter:tSPIInterLoader){ tSPIInter。method1(); System。out。println(tSPIInter。method2(testSPI)); } } publicinterfaceSPIInter{ voidmethod1(); Stringmethod2(Stringparam1); } publicclassInter1Imp1implementsSPIInter{ publicvoidmethod1(){ System。out。println(method1Impl1); } publicStringmethod2(Stringparam1){ returnparam1method2Impl1; } } publicclassInter1Imp2implementsSPIInter{ publicvoidmethod1(){ System。out。println(method1Impl2); } publicStringmethod2(Stringparam1){ returnparam1method2Impl2; } } METAINFservicesmodule。SPIInter module。Inter1Imp1 module。Inter1Imp2 } 输出 method1Impl1 testSPImethod2Impl1 method1Impl2 testSPImethod2Impl2