介绍
本篇内容介绍了“达博中ClassLoaderFilter的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
序
本文主要研究一下达博的ClassLoaderFilter
ClassLoaderFilter
dubbo-2.7.2/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ClassLoaderFilter.java
@Activate (=group CommonConstants.PROVIDER,, order =, -30000) public class  ClassLoaderFilter implements Filter  { ,,@Override ,,,public Result 调用(Invoker<?祝辞,调用程序,,Invocation 调用),throws RpcException { ,,,,,,,ClassLoader ocl =, Thread.currentThread () .getContextClassLoader (); ,,,,,,,Thread.currentThread () .setContextClassLoader (invoker.getInterface () .getClassLoader ()); ,,,,,,,try { ,,,,,,,,,,,return invoker.invoke(调用); ,,,,,,,},{finally ,,,,,,,,,,,Thread.currentThread () .setContextClassLoader (ocl); ,,,,,,,} ,,,} }
- <李>
ClassLoaderFilter实现了过滤器接口,其调用方法首先获取当前线程的contextClassLoader,然后将其contextClassLoader设置为invoker.getInterface () .getClassLoader(),之后执行invoker.invoke方法,最后将当前线程的类加载器重置为原来的contextClassLoader
李>实例
dubbo-2.7.2/dubbo-rpc/dubbo-rpc-api/src/测试/java/org/apache/dubbo/rpc/filter/ClassLoaderFilterTest.java
public class ClassLoaderFilterTest { ,,,private ClassLoaderFilter ClassLoaderFilter =, new ClassLoaderFilter (); ,,@Test ,,,public void testInvoke (), throws Exception { ,,,,,,,URL URL =, URL.valueOf(“测试://测试:11/测试? accesslog=true&组=dubbo&版本=1.1“); ,,,,,,,String path =, DemoService.class.getResource (“/? .getPath (); ,,,,,,,final URLClassLoader cl =, new URLClassLoader (new java.net.URL [] {new java.net.URL(“文件:“,+,路径)}),{ ,,,,,,,,,,@Override ,,,,,,,,,,,public Class<?祝辞,loadClass (String 名称),throws ClassNotFoundException { ,,,,,,,,,,,,,,,try { ,,,,,,,,,,,,,,,,,,,return findClass(名称); ,,,,,,,,,,,,,,,},catch (ClassNotFoundException e), { ,,,,,,,,,,,,,,,,,,,return super.loadClass(名称); ,,,,,,,,,,,,,,,} ,,,,,,,,,,,} ,,,,,,,}; ,,,,,,,final Class<?祝辞,clazz =, cl.loadClass (DemoService.class.getCanonicalName ()); ,,,,,,,Invoker Invoker =, new MyInvoker (url), { ,,,,,,,,,,@Override ,,,,,,,,,,,public Class getInterface (), { ,,,,,,,,,,,,,,,return clazz; ,,,,,,,,,,,} ,,,,,,,,,,@Override ,,,,,,,,,,,public Result 调用(Invocation 调用),throws RpcException { ,,,,,,,,,,,,,,,Assertions.assertEquals (cl, Thread.currentThread () .getContextClassLoader ()); ,,,,,,,,,,,,,,,return 零; ,,,,,,,,,,,} ,,,,,,,}; null null null null null达博中ClassLoaderFilter的作用是什么