千家信息网

dubbo中ClassLoaderFilter的作用是什么

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇内容介绍了"dubbo中ClassLoaderFilter的作用是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细
千家信息网最后更新 2025年12月03日dubbo中ClassLoaderFilter的作用是什么

本篇内容介绍了"dubbo中ClassLoaderFilter的作用是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

本文主要研究一下dubbo的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 invoke(Invoker invoker, Invocation invocation) throws RpcException {        ClassLoader ocl = Thread.currentThread().getContextClassLoader();        Thread.currentThread().setContextClassLoader(invoker.getInterface().getClassLoader());        try {            return invoker.invoke(invocation);        } finally {            Thread.currentThread().setContextClassLoader(ocl);        }    }}
  • ClassLoaderFilter实现了Filter接口,其invoke方法首先获取当前线程的contextClassLoader,然后将其ContextClassLoader设置为invoker.getInterface().getClassLoader(),之后执行invoker.invoke方法,最后将当前线程的classLoader重置为原来的contextClassLoader

实例

dubbo-2.7.2/dubbo-rpc/dubbo-rpc-api/src/test/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("test://test:11/test?accesslog=true&group=dubbo&version=1.1");        String path = DemoService.class.getResource("/").getPath();        final URLClassLoader cl = new URLClassLoader(new java.net.URL[]{new java.net.URL("file:" + path)}) {            @Override            public Class loadClass(String name) throws ClassNotFoundException {                try {                    return findClass(name);                } catch (ClassNotFoundException e) {                    return super.loadClass(name);                }            }        };        final Class clazz = cl.loadClass(DemoService.class.getCanonicalName());        Invoker invoker = new MyInvoker(url) {            @Override            public Class getInterface() {                return clazz;            }            @Override            public Result invoke(Invocation invocation) throws RpcException {                Assertions.assertEquals(cl, Thread.currentThread().getContextClassLoader());                return null;            }        };        Invocation invocation = Mockito.mock(Invocation.class);        classLoaderFilter.invoke(invoker, invocation);    }}
  • 这里invoker的interface设置为DemoService.class,然后验证invoke方法里头的Thread.currentThread().getContextClassLoader()为加载DemoService.class的URLClassLoader

小结

ClassLoaderFilter实现了Filter接口,其invoke方法首先获取当前线程的contextClassLoader,然后将其ContextClassLoader设置为invoker.getInterface().getClassLoader(),之后执行invoker.invoke方法,最后将当前线程的classLoader重置为原来的contextClassLoader

"dubbo中ClassLoaderFilter的作用是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

方法 线程 作用 内容 接口 更多 知识 实用 学有所成 接下来 困境 实例 实际 小结 情况 文章 案例 编带 网站 行业 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术服务可以开推广费吗 vb库存管理软件开发 可以做白银交易的软件开发 内网电影发布服务器 奕天网络技术是真的吗 昆明通信网络技术有限公司 idc 软件开发 三级网络技术考试内容 软件开发之用户需求 服务器折叠屏的作用 学校软件开发及存储管理合同 服务器第二个cpu 云服务器搭建管理系统 怎么快速升级大型服务器 数据库技术三级教程视频 搞视频网站最好用什么服务器 黑客文化与网络安全知到 基本科学指标数据库 四川邺兴互联网科技做什么的 大学生对网络安全的问题与思考 中国网络技术创新大会 利用gis的软件开发 网络安全用网图画 计算机网络技术和计算科学 行政单位网络安全工作责任制办法 数据库表的约束怎么加 河南软件开发直销系统 黄浦区创新数据库服务商前景 数据库技术与应用课堂 大数据网络技术专业就业方向
0