This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site-v2
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git
The following commit(s) were added to refs/heads/asf-site-v2 by this push:
new c4128ffb22 deploy: e0b64abbce1ecc70bfb3962856598fad77e00d07
c4128ffb22 is described below
commit c4128ffb2271230df03cbee72fe799f00ec88a69
Author: AlbumenJ <[email protected]>
AuthorDate: Wed Jun 28 12:11:33 2023 +0000
deploy: e0b64abbce1ecc70bfb3962856598fad77e00d07
---
sitemap.xml | 2 +-
.../serialization/fastjson/index.html | 26 +++---------------
.../serialization/fastjson2/index.html | 32 +++-------------------
.../serialization/hessian/index.html | 32 +++-------------------
.../reference-manual/serialization/index.html | 2 +-
.../serialization/protobuf/index.html | 26 +++---------------
.../spi/description/dubbo-spi/index.html | 24 ++++++++--------
.../reference-manual/spi/description/index.xml | 20 +++++++-------
zh-cn/sitemap.xml | 2 +-
9 files changed, 41 insertions(+), 125 deletions(-)
diff --git a/sitemap.xml b/sitemap.xml
index 8ac9ace557..f5bc4cab6f 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2023-06-28T20:05:01+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-05-10T11:59:30+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2023-06-28T20:06:10+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-05-10T11:59:30+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
diff --git
a/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson/index.html
b/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson/index.html
index 747919baf9..84c0eb5159 100644
---
a/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson/index.html
+++
b/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson/index.html
@@ -1,24 +1,6 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.114.1"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180. [...]
-2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-serialization-fastjson</artifactId> <version>1.0.1</version>
</dependency> <dependency> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>
</dependencies> 2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: fastjson 或
-# dubbo.properties dubbo.protocol.serialization=fastjson # or
dubbo.consumer.serialization=fastjson # or
dubbo.reference.com.demo.DemoService.serialization=fastjson 或
-<dubbo:protocol serialization="fastjson" /> <!-- or -->
<dubbo:consumer serialization="fastjson" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="fastjson" />
"><meta property="og:type" content="article"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson/"><meta
property="article:section" content="overview"><meta
property="article:modified_time" content="2023-05-09 [...]
-2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-serialization-fastjson</artifactId> <version>1.0.1</version>
</dependency> <dependency> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>
</dependencies> 2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: fastjson 或
-# dubbo.properties dubbo.protocol.serialization=fastjson # or
dubbo.consumer.serialization=fastjson # or
dubbo.reference.com.demo.DemoService.serialization=fastjson 或
-<dubbo:protocol serialization="fastjson" /> <!-- or -->
<dubbo:consumer serialization="fastjson" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="fastjson" />
"><meta itemprop=dateModified content="2023-05-09T10:43:48+08:00"><meta
itemprop=wordCount content="71"><meta itemprop=keywords content><meta
name=twitter:card content="summary"><meta name=twitter:title
content="Fastjson"><meta name=twitter:description content="1 介绍 Fastjson 是一个
Java 库, [...]
-2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-serialization-fastjson</artifactId> <version>1.0.1</version>
</dependency> <dependency> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>
</dependencies> 2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: fastjson 或
-# dubbo.properties dubbo.protocol.serialization=fastjson # or
dubbo.consumer.serialization=fastjson # or
dubbo.reference.com.demo.DemoService.serialization=fastjson 或
-<dubbo:protocol serialization="fastjson" /> <!-- or -->
<dubbo:consumer serialization="fastjson" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="fastjson" />
"><script async
src="https://www.googletagmanager.com/gtag/js?id=G-1TFHM5YBH0"></script>
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.114.1"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180. [...]
<script>var
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function
gtag(){dataLayer.push(arguments)}gtag("js",new
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link
rel=preload
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
as=style><link
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/a [...]
-<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="1 介绍 Fastjson 是一个
Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可用于将 JSON 字符串转换为等效的 Java 对象。 Fastjson
可以处理任意 Java 对象,包括您没有源代码的预先存在的对象。
-2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-serialization-fastjson</artifactId> <version>1.0.1</version>
</dependency> <dependency> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>
</dependencies> 2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: fastjson 或
-# dubbo.properties dubbo.protocol.serialization=fastjson # or
dubbo.consumer.serialization=fastjson # or
dubbo.reference.com.demo.DemoService.serialization=fastjson 或
-<dubbo:protocol serialization="fastjson" /> <!-- or -->
<dubbo:consumer serialization="fastjson" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="fastjson" />
"><meta property="og:description" content="1 介绍 Fastjson 是一个 Java 库,可用于将 Java
对象转换为其 JSON 表示形式。它还可用于将 JSON 字符串转换为等效的 Java 对象。 Fastjson 可以处理任意 Java
对象,包括您没有源代码的预先存在的对象。
-2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-serialization-fastjson</artifactId> <version>1.0.1</version>
</dependency> <dependency> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>
</dependencies> 2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: fastjson 或
-# dubbo.properties dubbo.protocol.serialization=fastjson # or
dubbo.consumer.serialization=fastjson # or
dubbo.reference.com.demo.DemoService.serialization=fastjson 或
-<dubbo:protocol serialization="fastjson" /> <!-- or -->
<dubbo:consumer serialization="fastjson" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="fastjson" />
"><meta name=twitter:description content="1 介绍 Fastjson 是一个 Java 库,可用于将 Java
对象转换为其 JSON 表示形式。它还可用于将 JSON 字符串转换为等效的 Java 对象。 Fastjson 可以处理任意 Java
对象,包括您没有源代码的预先存在的对象。
-2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-serialization-fastjson</artifactId> <version>1.0.1</version>
</dependency> <dependency> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>
</dependencies> 2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: fastjson 或
-# dubbo.properties dubbo.protocol.serialization=fastjson # or
dubbo.consumer.serialization=fastjson # or
dubbo.reference.com.demo.DemoService.serialization=fastjson 或
-<dubbo:protocol serialization="fastjson" /> <!-- or -->
<dubbo:consumer serialization="fastjson" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="fastjson" />
"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson/"><meta
property="og:title" content="Fastjson"><meta name=twitter:title
content="Fastjson"><meta name=twitter:image:alt content="Apache Dubbo"><meta
proper [...]
+<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="本文介绍 Fastjson
序列化"><meta property="og:description" content="本文介绍 Fastjson 序列化"><meta
name=twitter:description content="本文介绍 Fastjson 序列化"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson/"><meta
property="og:title" c [...]
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css
rel=stylesheet><link href=/css/language.css rel=stylesheet><script
src=/js/script.js></script></head><body class="td-page
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="
[...]
<label for=m-zh-cnoverviewhome-check><a href=/zh-cn/overview/home/
title="Dubbo 文档" class="align-left pl-0 td-sidebar-link
td-sidebar-link__section"
id=m-zh-cnoverviewhome><span>主页</span></a></label></li><li
class="td-sidebar-nav__section-title td-sidebar-nav__section with-child"
id=m-zh-cnoverviewquickstart-li><input type=checkbox
id=m-zh-cnoverviewquickstart-check>
<label for=m-zh-cnoverviewquickstart-check><a href=/zh-cn/overview/quickstart/
title="Dubbo 入门" class="align-left pl-0 td-sidebar-link
td-sidebar-link__section"
id=m-zh-cnoverviewquickstart><span>入门</span></a></label><ul class="ul-2
foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section
with-child" id=m-zh-cnoverviewquickstartjava-li><input type=checkbox
id=m-zh-cnoverviewquickstartjava-check>
@@ -688,7 +670,7 @@
<label for=m-zh-cnoverviewreferenceprotocols-check><a
href=/zh-cn/overview/reference/protocols/ class="align-left pl-0
td-sidebar-link td-sidebar-link__section"
id=m-zh-cnoverviewreferenceprotocols><span>协议规范</span></a></label><ul
class="ul-3 foldable"><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstriple-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstriple-check>
<label for=m-zh-cnoverviewreferenceprotocolstriple-check><a
href=/zh-cn/overview/reference/protocols/triple/ title="Triple 协议设计理念与规范"
class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstcp-check>
<label for=m-zh-cnoverviewreferenceprotocolstcp-check><a
href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolshttp-check>
-<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
+<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
</span></span><span style=display:flex><span> <span
style=color:#268bd2><dependency></span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2><groupId></span>org.apache.dubbo.extensions<span
style=color:#268bd2></groupId></span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2><artifactId></span>dubbo-serialization-fastjson<span
style=color:#268bd2></artifactId></span>
@@ -720,7 +702,7 @@
</span></span><span style=display:flex><span><span style=color:#586e75><!--
or --></span>
</span></span><span style=display:flex><span><span
style=color:#268bd2><dubbo:reference</span> interface=<span
style=color:#2aa198>"xxx"</span> serialization=<span
style=color:#2aa198>"fastjson"</span> <span
style=color:#268bd2>/></span>
</span></span></code></pre></div><div id=pre-footer><h2>反馈</h2><p
class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4
feedback--yes">是</button>
-<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
+<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%
[...]
<a href="https://github.com/apache/dubbo-website/issues/new?title=Fastjson"
target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div></main><div class="d-none d-xl-block
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a href=#1-介绍>1
介绍</a></li><li><a href=#2-使用方式>2 使用方式</a><ul><li><a href=#21-添加依赖>2.1
添加依赖</a></li><li><a href=#22-配置启用>2.2
配置启用</a></li></ul></li></ul></nav></div></div></div></div><footer
class="bg-dark py-5 row d-print-none footer-margin-0"><div
class="container-fluid mx-sm [...]
diff --git
a/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson2/index.html
b/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson2/index.html
index d97ea76459..85ebed150e 100644
---
a/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson2/index.html
+++
b/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson2/index.html
@@ -1,30 +1,6 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson2/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.114.1"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180 [...]
-支持JSON/JSONB两种协议,JSONPath 是一等公民。 支持全量解析和部分解析。 支持Java服务端、客户端Android、大数据场景。
支持Kotlin https://alibaba.github.io/fastjson2/kotlin_cn 支持JSON Schema
https://alibaba.github.io/fastjson2/json_schema_cn 支持Android 8+ 支持Graal
Native-Image 支持 JSON Schema https://alibaba.github.io/fastjson2/json_schema_cn
2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId>
<version>2.0.23</version> </dependency> </dependencies> 注:Fastjson2 序列化仅 Dubbo
[...]
-2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
fastjson2 或
-# dubbo.properties dubbo.protocol.serialization=fastjson2 # or
dubbo.consumer.serialization=fastjson2 # or
dubbo.reference.com.demo.DemoService.serialization=fastjson2 或
-<dubbo:protocol serialization="fastjson2" /> <!-- or -->
<dubbo:consumer serialization="fastjson2" /> <!"><meta
property="og:type" content="article"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson2/"><meta
property="article:section" content="overview"><meta
property="article:modified_time" content="2023-05-09T10:43:48+08:00"><meta
itemprop=name content="Fastjson2"><meta itemprop=description [...]
-支持JSON/JSONB两种协议,JSONPath 是一等公民。 支持全量解析和部分解析。 支持Java服务端、客户端Android、大数据场景。
支持Kotlin https://alibaba.github.io/fastjson2/kotlin_cn 支持JSON Schema
https://alibaba.github.io/fastjson2/json_schema_cn 支持Android 8+ 支持Graal
Native-Image 支持 JSON Schema https://alibaba.github.io/fastjson2/json_schema_cn
2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId>
<version>2.0.23</version> </dependency> </dependencies> 注:Fastjson2 序列化仅 Dubbo
[...]
-2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
fastjson2 或
-# dubbo.properties dubbo.protocol.serialization=fastjson2 # or
dubbo.consumer.serialization=fastjson2 # or
dubbo.reference.com.demo.DemoService.serialization=fastjson2 或
-<dubbo:protocol serialization="fastjson2" /> <!-- or -->
<dubbo:consumer serialization="fastjson2" /> <!"><meta
itemprop=dateModified content="2023-05-09T10:43:48+08:00"><meta
itemprop=wordCount content="81"><meta itemprop=keywords content><meta
name=twitter:card content="summary"><meta name=twitter:title
content="Fastjson2"><meta name=twitter:description content="1 介绍 FASTJSON
v2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库。通过同一套API,
-支持JSON/JSONB两种协议,JSONPath 是一等公民。 支持全量解析和部分解析。 支持Java服务端、客户端Android、大数据场景。
支持Kotlin https://alibaba.github.io/fastjson2/kotlin_cn 支持JSON Schema
https://alibaba.github.io/fastjson2/json_schema_cn 支持Android 8+ 支持Graal
Native-Image 支持 JSON Schema https://alibaba.github.io/fastjson2/json_schema_cn
2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId>
<version>2.0.23</version> </dependency> </dependencies> 注:Fastjson2 序列化仅 Dubbo
[...]
-2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
fastjson2 或
-# dubbo.properties dubbo.protocol.serialization=fastjson2 # or
dubbo.consumer.serialization=fastjson2 # or
dubbo.reference.com.demo.DemoService.serialization=fastjson2 或
-<dubbo:protocol serialization="fastjson2" /> <!-- or -->
<dubbo:consumer serialization="fastjson2" /> <!"><script async
src="https://www.googletagmanager.com/gtag/js?id=G-1TFHM5YBH0"></script>
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson2/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.114.1"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180 [...]
<script>var
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function
gtag(){dataLayer.push(arguments)}gtag("js",new
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link
rel=preload
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
as=style><link
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/a [...]
-<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="1 介绍 FASTJSON
v2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库。通过同一套API,
-支持JSON/JSONB两种协议,JSONPath 是一等公民。 支持全量解析和部分解析。 支持Java服务端、客户端Android、大数据场景。
支持Kotlin https://alibaba.github.io/fastjson2/kotlin_cn 支持JSON Schema
https://alibaba.github.io/fastjson2/json_schema_cn 支持Android 8+ 支持Graal
Native-Image 支持 JSON Schema https://alibaba.github.io/fastjson2/json_schema_cn
2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId>
<version>2.0.23</version> </dependency> </dependencies> 注:Fastjson2 序列化仅 Dubbo
[...]
-2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
fastjson2 或
-# dubbo.properties dubbo.protocol.serialization=fastjson2 # or
dubbo.consumer.serialization=fastjson2 # or
dubbo.reference.com.demo.DemoService.serialization=fastjson2 或
-<dubbo:protocol serialization="fastjson2" /> <!-- or -->
<dubbo:consumer serialization="fastjson2" /> <!"><meta
property="og:description" content="1 介绍 FASTJSON
v2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库。通过同一套API,
-支持JSON/JSONB两种协议,JSONPath 是一等公民。 支持全量解析和部分解析。 支持Java服务端、客户端Android、大数据场景。
支持Kotlin https://alibaba.github.io/fastjson2/kotlin_cn 支持JSON Schema
https://alibaba.github.io/fastjson2/json_schema_cn 支持Android 8+ 支持Graal
Native-Image 支持 JSON Schema https://alibaba.github.io/fastjson2/json_schema_cn
2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId>
<version>2.0.23</version> </dependency> </dependencies> 注:Fastjson2 序列化仅 Dubbo
[...]
-2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
fastjson2 或
-# dubbo.properties dubbo.protocol.serialization=fastjson2 # or
dubbo.consumer.serialization=fastjson2 # or
dubbo.reference.com.demo.DemoService.serialization=fastjson2 或
-<dubbo:protocol serialization="fastjson2" /> <!-- or -->
<dubbo:consumer serialization="fastjson2" /> <!"><meta
name=twitter:description content="1 介绍 FASTJSON
v2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库。通过同一套API,
-支持JSON/JSONB两种协议,JSONPath 是一等公民。 支持全量解析和部分解析。 支持Java服务端、客户端Android、大数据场景。
支持Kotlin https://alibaba.github.io/fastjson2/kotlin_cn 支持JSON Schema
https://alibaba.github.io/fastjson2/json_schema_cn 支持Android 8+ 支持Graal
Native-Image 支持 JSON Schema https://alibaba.github.io/fastjson2/json_schema_cn
2 使用方式 2.1 添加依赖 <dependencies> <dependency>
<groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId>
<version>2.0.23</version> </dependency> </dependencies> 注:Fastjson2 序列化仅 Dubbo
[...]
-2.2 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
fastjson2 或
-# dubbo.properties dubbo.protocol.serialization=fastjson2 # or
dubbo.consumer.serialization=fastjson2 # or
dubbo.reference.com.demo.DemoService.serialization=fastjson2 或
-<dubbo:protocol serialization="fastjson2" /> <!-- or -->
<dubbo:consumer serialization="fastjson2" /> <!"><meta
property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson2/"><meta
property="og:title" content="Fastjson2"><meta name=twitter:title
content="Fastjson2"><meta name=twitter:image:alt content="Apache Dubbo"><meta
property="og:type" content="article"><meta name=viewport
content="width=device-width"><s [...]
+<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="本文介绍 Fastjson2
序列化"><meta property="og:description" content="本文介绍 Fastjson2 序列化"><meta
name=twitter:description content="本文介绍 Fastjson2 序列化"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson2/"><meta
property="og:titl [...]
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css
rel=stylesheet><link href=/css/language.css rel=stylesheet><script
src=/js/script.js></script></head><body class="td-page
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="
[...]
<label for=m-zh-cnoverviewhome-check><a href=/zh-cn/overview/home/
title="Dubbo 文档" class="align-left pl-0 td-sidebar-link
td-sidebar-link__section"
id=m-zh-cnoverviewhome><span>主页</span></a></label></li><li
class="td-sidebar-nav__section-title td-sidebar-nav__section with-child"
id=m-zh-cnoverviewquickstart-li><input type=checkbox
id=m-zh-cnoverviewquickstart-check>
<label for=m-zh-cnoverviewquickstart-check><a href=/zh-cn/overview/quickstart/
title="Dubbo 入门" class="align-left pl-0 td-sidebar-link
td-sidebar-link__section"
id=m-zh-cnoverviewquickstart><span>入门</span></a></label><ul class="ul-2
foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section
with-child" id=m-zh-cnoverviewquickstartjava-li><input type=checkbox
id=m-zh-cnoverviewquickstartjava-check>
@@ -694,7 +670,7 @@
<label for=m-zh-cnoverviewreferenceprotocols-check><a
href=/zh-cn/overview/reference/protocols/ class="align-left pl-0
td-sidebar-link td-sidebar-link__section"
id=m-zh-cnoverviewreferenceprotocols><span>协议规范</span></a></label><ul
class="ul-3 foldable"><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstriple-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstriple-check>
<label for=m-zh-cnoverviewreferenceprotocolstriple-check><a
href=/zh-cn/overview/reference/protocols/triple/ title="Triple 协议设计理念与规范"
class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstcp-check>
<label for=m-zh-cnoverviewreferenceprotocolstcp-check><a
href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolshttp-check>
-<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
+<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
</span></span><span style=display:flex><span> <span
style=color:#268bd2><dependency></span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2><groupId></span>com.alibaba.fastjson2<span
style=color:#268bd2></groupId></span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2><artifactId></span>fastjson2<span
style=color:#268bd2></artifactId></span>
@@ -721,7 +697,7 @@
</span></span><span style=display:flex><span><span style=color:#586e75><!--
or --></span>
</span></span><span style=display:flex><span><span
style=color:#268bd2><dubbo:reference</span> interface=<span
style=color:#2aa198>"xxx"</span> serialization=<span
style=color:#2aa198>"fastjson2"</span> <span
style=color:#268bd2>/></span>
</span></span></code></pre></div><div id=pre-footer><h2>反馈</h2><p
class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4
feedback--yes">是</button>
-<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
+<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/fastjson2.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md
[...]
<a href="https://github.com/apache/dubbo-website/issues/new?title=Fastjson2"
target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div></main><div class="d-none d-xl-block
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a href=#1-介绍>1
介绍</a></li><li><a href=#2-使用方式>2 使用方式</a><ul><li><a href=#21-添加依赖>2.1
添加依赖</a></li><li><a href=#22-配置启用>2.2
配置启用</a></li></ul></li></ul></nav></div></div></div></div><footer
class="bg-dark py-5 row d-print-none footer-margin-0"><div
class="container-fluid mx-sm [...]
diff --git
a/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/hessian/index.html
b/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/hessian/index.html
index fd8eea0587..ae7af6ef79 100644
---
a/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/hessian/index.html
+++
b/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/hessian/index.html
@@ -1,30 +1,6 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/hessian/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.114.1"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180.p [...]
-自描述序列化类型。不依赖外部描述文件或者接口定义,用一个字节表示常用的基础类型,极大缩短二进制流。 语言无关,支持脚本语言
协议简单,比Java原生序列化高效
相比hessian1,hessian2中增加了压缩编码,其序列化二进制流大小是Java序列化的50%,序列化耗时是Java序列化的30%,反序列化耗时是Java序列化的20%。
2 使用方式 Dubbo < 3.2.0 版本中,默认使用 Hessian2 作为默认序列化
-2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
hessian2 或
-# dubbo.properties dubbo.protocol.serialization=hessian2 # or
dubbo.consumer.serialization=hessian2 # or
dubbo.reference.com.demo.DemoService.serialization=hessian2 或
-<dubbo:protocol serialization="hessian2" /> <!-- or -->
<dubbo:consumer serialization="hessian2" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="hessian2" />
"><meta property="og:type" content="article"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/hessian/"><meta
property="article:section" content="overview"><meta
property="article:modified_time" content="2023-05-09T [...]
-自描述序列化类型。不依赖外部描述文件或者接口定义,用一个字节表示常用的基础类型,极大缩短二进制流。 语言无关,支持脚本语言
协议简单,比Java原生序列化高效
相比hessian1,hessian2中增加了压缩编码,其序列化二进制流大小是Java序列化的50%,序列化耗时是Java序列化的30%,反序列化耗时是Java序列化的20%。
2 使用方式 Dubbo < 3.2.0 版本中,默认使用 Hessian2 作为默认序列化
-2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
hessian2 或
-# dubbo.properties dubbo.protocol.serialization=hessian2 # or
dubbo.consumer.serialization=hessian2 # or
dubbo.reference.com.demo.DemoService.serialization=hessian2 或
-<dubbo:protocol serialization="hessian2" /> <!-- or -->
<dubbo:consumer serialization="hessian2" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="hessian2" />
"><meta itemprop=dateModified content="2023-05-09T10:43:48+08:00"><meta
itemprop=wordCount content="52"><meta itemprop=keywords content><meta
name=twitter:card content="summary"><meta name=twitter:title
content="Hessian"><meta name=twitter:description content="1 介绍
Hessian序列化是一种支持动态类型、跨 [...]
-自描述序列化类型。不依赖外部描述文件或者接口定义,用一个字节表示常用的基础类型,极大缩短二进制流。 语言无关,支持脚本语言
协议简单,比Java原生序列化高效
相比hessian1,hessian2中增加了压缩编码,其序列化二进制流大小是Java序列化的50%,序列化耗时是Java序列化的30%,反序列化耗时是Java序列化的20%。
2 使用方式 Dubbo < 3.2.0 版本中,默认使用 Hessian2 作为默认序列化
-2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
hessian2 或
-# dubbo.properties dubbo.protocol.serialization=hessian2 # or
dubbo.consumer.serialization=hessian2 # or
dubbo.reference.com.demo.DemoService.serialization=hessian2 或
-<dubbo:protocol serialization="hessian2" /> <!-- or -->
<dubbo:consumer serialization="hessian2" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="hessian2" />
"><script async
src="https://www.googletagmanager.com/gtag/js?id=G-1TFHM5YBH0"></script>
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/hessian/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.114.1"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180.p [...]
<script>var
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function
gtag(){dataLayer.push(arguments)}gtag("js",new
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link
rel=preload
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
as=style><link
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/a [...]
-<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="1 介绍
Hessian序列化是一种支持动态类型、跨语言、基于对象传输的网络协议,Java对象序列化的二进制流可以被其他语言(如,c++,python)。特性如下:
-自描述序列化类型。不依赖外部描述文件或者接口定义,用一个字节表示常用的基础类型,极大缩短二进制流。 语言无关,支持脚本语言
协议简单,比Java原生序列化高效
相比hessian1,hessian2中增加了压缩编码,其序列化二进制流大小是Java序列化的50%,序列化耗时是Java序列化的30%,反序列化耗时是Java序列化的20%。
2 使用方式 Dubbo < 3.2.0 版本中,默认使用 Hessian2 作为默认序列化
-2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
hessian2 或
-# dubbo.properties dubbo.protocol.serialization=hessian2 # or
dubbo.consumer.serialization=hessian2 # or
dubbo.reference.com.demo.DemoService.serialization=hessian2 或
-<dubbo:protocol serialization="hessian2" /> <!-- or -->
<dubbo:consumer serialization="hessian2" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="hessian2" />
"><meta property="og:description" content="1 介绍
Hessian序列化是一种支持动态类型、跨语言、基于对象传输的网络协议,Java对象序列化的二进制流可以被其他语言(如,c++,python)。特性如下:
-自描述序列化类型。不依赖外部描述文件或者接口定义,用一个字节表示常用的基础类型,极大缩短二进制流。 语言无关,支持脚本语言
协议简单,比Java原生序列化高效
相比hessian1,hessian2中增加了压缩编码,其序列化二进制流大小是Java序列化的50%,序列化耗时是Java序列化的30%,反序列化耗时是Java序列化的20%。
2 使用方式 Dubbo < 3.2.0 版本中,默认使用 Hessian2 作为默认序列化
-2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
hessian2 或
-# dubbo.properties dubbo.protocol.serialization=hessian2 # or
dubbo.consumer.serialization=hessian2 # or
dubbo.reference.com.demo.DemoService.serialization=hessian2 或
-<dubbo:protocol serialization="hessian2" /> <!-- or -->
<dubbo:consumer serialization="hessian2" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="hessian2" />
"><meta name=twitter:description content="1 介绍
Hessian序列化是一种支持动态类型、跨语言、基于对象传输的网络协议,Java对象序列化的二进制流可以被其他语言(如,c++,python)。特性如下:
-自描述序列化类型。不依赖外部描述文件或者接口定义,用一个字节表示常用的基础类型,极大缩短二进制流。 语言无关,支持脚本语言
协议简单,比Java原生序列化高效
相比hessian1,hessian2中增加了压缩编码,其序列化二进制流大小是Java序列化的50%,序列化耗时是Java序列化的30%,反序列化耗时是Java序列化的20%。
2 使用方式 Dubbo < 3.2.0 版本中,默认使用 Hessian2 作为默认序列化
-2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol: serialization:
hessian2 或
-# dubbo.properties dubbo.protocol.serialization=hessian2 # or
dubbo.consumer.serialization=hessian2 # or
dubbo.reference.com.demo.DemoService.serialization=hessian2 或
-<dubbo:protocol serialization="hessian2" /> <!-- or -->
<dubbo:consumer serialization="hessian2" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="hessian2" />
"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/hessian/"><meta
property="og:title" content="Hessian"><meta name=twitter:title
content="Hessian"><meta name=twitter:image:alt content="Apache Dubbo"><meta
property= [...]
+<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="本文介绍 Hessian
序列化"><meta property="og:description" content="本文介绍 Hessian 序列化"><meta
name=twitter:description content="本文介绍 Hessian 序列化"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/hessian/"><meta
property="og:title" conte [...]
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css
rel=stylesheet><link href=/css/language.css rel=stylesheet><script
src=/js/script.js></script></head><body class="td-page
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="
[...]
<label for=m-zh-cnoverviewhome-check><a href=/zh-cn/overview/home/
title="Dubbo 文档" class="align-left pl-0 td-sidebar-link
td-sidebar-link__section"
id=m-zh-cnoverviewhome><span>主页</span></a></label></li><li
class="td-sidebar-nav__section-title td-sidebar-nav__section with-child"
id=m-zh-cnoverviewquickstart-li><input type=checkbox
id=m-zh-cnoverviewquickstart-check>
<label for=m-zh-cnoverviewquickstart-check><a href=/zh-cn/overview/quickstart/
title="Dubbo 入门" class="align-left pl-0 td-sidebar-link
td-sidebar-link__section"
id=m-zh-cnoverviewquickstart><span>入门</span></a></label><ul class="ul-2
foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section
with-child" id=m-zh-cnoverviewquickstartjava-li><input type=checkbox
id=m-zh-cnoverviewquickstartjava-check>
@@ -694,7 +670,7 @@
<label for=m-zh-cnoverviewreferenceprotocols-check><a
href=/zh-cn/overview/reference/protocols/ class="align-left pl-0
td-sidebar-link td-sidebar-link__section"
id=m-zh-cnoverviewreferenceprotocols><span>协议规范</span></a></label><ul
class="ul-3 foldable"><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstriple-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstriple-check>
<label for=m-zh-cnoverviewreferenceprotocolstriple-check><a
href=/zh-cn/overview/reference/protocols/triple/ title="Triple 协议设计理念与规范"
class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstcp-check>
<label for=m-zh-cnoverviewreferenceprotocolstcp-check><a
href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolshttp-check>
-<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
+<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
</span></span><span style=display:flex><span><span
style=color:#268bd2>dubbo</span>:
</span></span><span style=display:flex><span> <span
style=color:#268bd2>protocol</span>:
</span></span><span style=display:flex><span> <span
style=color:#268bd2>serialization</span>: hessian2
@@ -714,7 +690,7 @@
</span></span><span style=display:flex><span> <span
style=color:#586e75><!-- or --></span>
</span></span><span style=display:flex><span><span
style=color:#268bd2><dubbo:reference</span> interface=<span
style=color:#2aa198>"xxx"</span> serialization=<span
style=color:#2aa198>"hessian2"</span> <span
style=color:#268bd2>/></span>
</span></span></code></pre></div><div id=pre-footer><h2>反馈</h2><p
class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4
feedback--yes">是</button>
-<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
+<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/hessian.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%6
[...]
<a href="https://github.com/apache/dubbo-website/issues/new?title=Hessian"
target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div></main><div class="d-none d-xl-block
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a href=#1-介绍>1
介绍</a></li><li><a href=#2-使用方式>2 使用方式</a><ul><li><a href=#21-配置启用>2.1
配置启用</a></li></ul></li></ul></nav></div></div></div></div><footer
class="bg-dark py-5 row d-print-none footer-margin-0"><div
class="container-fluid mx-sm-5"><div class=row><div class="col-6 c [...]
diff --git
a/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/index.html
b/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/index.html
index cfdadbb948..fbb8e5f298 100644
--- a/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/index.html
+++ b/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/index.html
@@ -670,7 +670,7 @@
<label for=m-zh-cnoverviewreferenceprotocols-check><a
href=/zh-cn/overview/reference/protocols/ class="align-left pl-0
td-sidebar-link td-sidebar-link__section"
id=m-zh-cnoverviewreferenceprotocols><span>协议规范</span></a></label><ul
class="ul-3 foldable"><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstriple-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstriple-check>
<label for=m-zh-cnoverviewreferenceprotocolstriple-check><a
href=/zh-cn/overview/reference/protocols/triple/ title="Triple 协议设计理念与规范"
class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstcp-check>
<label for=m-zh-cnoverviewreferenceprotocolstcp-check><a
href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolshttp-check>
-<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
+<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/_index.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60
[...]
<a
href="https://github.com/apache/dubbo-website/issues/new?title=%e5%ba%8f%e5%88%97%e5%8c%96"
target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
diff --git
a/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/protobuf/index.html
b/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/protobuf/index.html
index e7995fc264..0ac103cdd8 100644
---
a/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/protobuf/index.html
+++
b/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/protobuf/index.html
@@ -1,24 +1,6 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/protobuf/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.114.1"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180. [...]
-2 使用方式 2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: protobuf 或
-# dubbo.properties dubbo.protocol.serialization=protobuf # or
dubbo.consumer.serialization=protobuf # or
dubbo.reference.com.demo.DemoService.serialization=protobuf 或
-<dubbo:protocol serialization="protobuf" /> <!-- or -->
<dubbo:consumer serialization="protobuf" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="protobuf" />
"><meta property="og:type" content="article"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/protobuf/"><meta
property="article:section" content="overview"><meta
property="article:modified_time" content="2023-05-09 [...]
-2 使用方式 2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: protobuf 或
-# dubbo.properties dubbo.protocol.serialization=protobuf # or
dubbo.consumer.serialization=protobuf # or
dubbo.reference.com.demo.DemoService.serialization=protobuf 或
-<dubbo:protocol serialization="protobuf" /> <!-- or -->
<dubbo:consumer serialization="protobuf" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="protobuf" />
"><meta itemprop=dateModified content="2023-05-09T10:43:48+08:00"><meta
itemprop=wordCount content="43"><meta itemprop=keywords content><meta
name=twitter:card content="summary"><meta name=twitter:title
content="Protobuf"><meta name=twitter:description content="1 介绍 Protocol
Buffers是一种开 [...]
-2 使用方式 2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: protobuf 或
-# dubbo.properties dubbo.protocol.serialization=protobuf # or
dubbo.consumer.serialization=protobuf # or
dubbo.reference.com.demo.DemoService.serialization=protobuf 或
-<dubbo:protocol serialization="protobuf" /> <!-- or -->
<dubbo:consumer serialization="protobuf" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="protobuf" />
"><script async
src="https://www.googletagmanager.com/gtag/js?id=G-1TFHM5YBH0"></script>
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/protobuf/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.114.1"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180. [...]
<script>var
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function
gtag(){dataLayer.push(arguments)}gtag("js",new
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link
rel=preload
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
as=style><link
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/a [...]
-<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="1 介绍 Protocol
Buffers是一种开源跨平台的序列化数据结构的协议。其对于存储资料或在网络上进行通信的程序是很有用的。这个方法包含一个接口描述语言,描述一些数据结构,并提供程序工具根据这些描述产生代码,这些代码将用来生成或解析代表这些数据结构的字节流。
-2 使用方式 2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: protobuf 或
-# dubbo.properties dubbo.protocol.serialization=protobuf # or
dubbo.consumer.serialization=protobuf # or
dubbo.reference.com.demo.DemoService.serialization=protobuf 或
-<dubbo:protocol serialization="protobuf" /> <!-- or -->
<dubbo:consumer serialization="protobuf" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="protobuf" />
"><meta property="og:description" content="1 介绍 Protocol
Buffers是一种开源跨平台的序列化数据结构的协议。其对于存储资料或在网络上进行通信的程序是很有用的。这个方法包含一个接口描述语言,描述一些数据结构,并提供程序工具根据这些描述产生代码,这些代码将用来生成或解析代表这些数据结构的字节流。
-2 使用方式 2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: protobuf 或
-# dubbo.properties dubbo.protocol.serialization=protobuf # or
dubbo.consumer.serialization=protobuf # or
dubbo.reference.com.demo.DemoService.serialization=protobuf 或
-<dubbo:protocol serialization="protobuf" /> <!-- or -->
<dubbo:consumer serialization="protobuf" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="protobuf" />
"><meta name=twitter:description content="1 介绍 Protocol
Buffers是一种开源跨平台的序列化数据结构的协议。其对于存储资料或在网络上进行通信的程序是很有用的。这个方法包含一个接口描述语言,描述一些数据结构,并提供程序工具根据这些描述产生代码,这些代码将用来生成或解析代表这些数据结构的字节流。
-2 使用方式 2.1 配置启用 # application.yml (Spring Boot) dubbo: protocol:
serialization: protobuf 或
-# dubbo.properties dubbo.protocol.serialization=protobuf # or
dubbo.consumer.serialization=protobuf # or
dubbo.reference.com.demo.DemoService.serialization=protobuf 或
-<dubbo:protocol serialization="protobuf" /> <!-- or -->
<dubbo:consumer serialization="protobuf" /> <!-- or -->
<dubbo:reference interface="xxx" serialization="protobuf" />
"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/protobuf/"><meta
property="og:title" content="Protobuf"><meta name=twitter:title
content="Protobuf"><meta name=twitter:image:alt content="Apache Dubbo"><meta
proper [...]
+<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="本文介绍 Protobuf
序列化"><meta property="og:description" content="本文介绍 Protobuf 序列化"><meta
name=twitter:description content="本文介绍 Protobuf 序列化"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/protobuf/"><meta
property="og:title" c [...]
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css
rel=stylesheet><link href=/css/language.css rel=stylesheet><script
src=/js/script.js></script></head><body class="td-page
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="
[...]
<label for=m-zh-cnoverviewhome-check><a href=/zh-cn/overview/home/
title="Dubbo 文档" class="align-left pl-0 td-sidebar-link
td-sidebar-link__section"
id=m-zh-cnoverviewhome><span>主页</span></a></label></li><li
class="td-sidebar-nav__section-title td-sidebar-nav__section with-child"
id=m-zh-cnoverviewquickstart-li><input type=checkbox
id=m-zh-cnoverviewquickstart-check>
<label for=m-zh-cnoverviewquickstart-check><a href=/zh-cn/overview/quickstart/
title="Dubbo 入门" class="align-left pl-0 td-sidebar-link
td-sidebar-link__section"
id=m-zh-cnoverviewquickstart><span>入门</span></a></label><ul class="ul-2
foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section
with-child" id=m-zh-cnoverviewquickstartjava-li><input type=checkbox
id=m-zh-cnoverviewquickstartjava-check>
@@ -688,7 +670,7 @@
<label for=m-zh-cnoverviewreferenceprotocols-check><a
href=/zh-cn/overview/reference/protocols/ class="align-left pl-0
td-sidebar-link td-sidebar-link__section"
id=m-zh-cnoverviewreferenceprotocols><span>协议规范</span></a></label><ul
class="ul-3 foldable"><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstriple-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstriple-check>
<label for=m-zh-cnoverviewreferenceprotocolstriple-check><a
href=/zh-cn/overview/reference/protocols/triple/ title="Triple 协议设计理念与规范"
class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstcp-check>
<label for=m-zh-cnoverviewreferenceprotocolstcp-check><a
href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolshttp-check>
-<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
+<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
</span></span><span style=display:flex><span><span
style=color:#268bd2>dubbo</span>:
</span></span><span style=display:flex><span> <span
style=color:#268bd2>protocol</span>:
</span></span><span style=display:flex><span> <span
style=color:#268bd2>serialization</span>: protobuf
@@ -708,7 +690,7 @@
</span></span><span style=display:flex><span> <span
style=color:#586e75><!-- or --></span>
</span></span><span style=display:flex><span><span
style=color:#268bd2><dubbo:reference</span> interface=<span
style=color:#2aa198>"xxx"</span> serialization=<span
style=color:#2aa198>"protobuf"</span> <span
style=color:#268bd2>/></span>
</span></span></code></pre></div><div id=pre-footer><h2>反馈</h2><p
class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4
feedback--yes">是</button>
-<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
+<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/protobuf.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%
[...]
<a href="https://github.com/apache/dubbo-website/issues/new?title=Protobuf"
target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div></main><div class="d-none d-xl-block
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a href=#1-介绍>1
介绍</a></li><li><a href=#2-使用方式>2 使用方式</a><ul><li><a href=#21-配置启用>2.1
配置启用</a></li></ul></li></ul></nav></div></div></div></div><footer
class="bg-dark py-5 row d-print-none footer-margin-0"><div
class="container-fluid mx-sm-5"><div class=row><div class="col-6 c [...]
diff --git
a/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dubbo-spi/index.html
b/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dubbo-spi/index.html
index da5f6e0969..33ce206c8d 100644
---
a/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dubbo-spi/index.html
+++
b/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dubbo-spi/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dubbo-spi/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.114.1"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x1 [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dubbo-spi/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.114.1"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x1 [...]
<script>var
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function
gtag(){dataLayer.push(arguments)}gtag("js",new
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link
rel=preload
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
as=style><link
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/a [...]
<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="本文介绍了 Dubbo SPI
的原理和实现细节"><meta property="og:description" content="本文介绍了 Dubbo SPI
的原理和实现细节"><meta name=twitter:description content="本文介绍了 Dubbo SPI
的原理和实现细节"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dubbo-spi/"><me
[...]
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css
rel=stylesheet><link href=/css/language.css rel=stylesheet><script
src=/js/script.js></script></head><body class="td-page
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="
[...]
@@ -670,7 +670,7 @@
<label for=m-zh-cnoverviewreferenceprotocols-check><a
href=/zh-cn/overview/reference/protocols/ class="align-left pl-0
td-sidebar-link td-sidebar-link__section"
id=m-zh-cnoverviewreferenceprotocols><span>协议规范</span></a></label><ul
class="ul-3 foldable"><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstriple-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstriple-check>
<label for=m-zh-cnoverviewreferenceprotocolstriple-check><a
href=/zh-cn/overview/reference/protocols/triple/ title="Triple 协议设计理念与规范"
class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstcp-check>
<label for=m-zh-cnoverviewreferenceprotocolstcp-check><a
href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolshttp-check>
-<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
+<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另一种是加载自适应扩展类。这两种方式会在下面详细的介绍。
需要特别注意的是: 在 Dubbo 中,基于 SPI 扩展加载的类是单例的。</p><h3 id=11-加载固定的扩展类>1.1
加载固定的扩展类</h3><p>如果让你来设计加载固定扩展类,你会怎么做了?
一种常见思路是读取特定目录下的配置文件,然后解析出全类名,通过反射机制来实例化这个类,然后将这个类放在集合中存起来,如果有需要的时候,直接从集合中取。Dubbo
中的实现也是这么一个思路。
@@ -755,7 +755,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span><span style=display:flex><span> type <span
style=color:#719e07>+</span> <span style=color:#2aa198>") couldn't be
instantiated: "</span> <span style=color:#719e07>+</span> t<span
style=color:#719e07>.</span>getMessage<span style=color:#719e07>(),</span>
t<span style=color:#719e07>);</span>
</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div><p>createExtension
方法的逻辑稍复杂一下,包含了如下的步骤:</p><ol><li>通过 getExtensionClasses
获取所有的拓展类</li><li>通过反射创建拓展对象</li><li>向拓展对象中注入依赖</li><li>将拓展对象包裹在相应的 Wrapper
对象中</li><li>初始化拓展对象</li></ol><p>以上步骤中,第一个步骤是加载拓展类的关键,第三和第四个步骤是 Dubbo IOC 与 AOP
的具体实现。在接下来的章节中,将会重点分析 getExtensionClasses 方法的逻辑,以及简单介绍 Dubbo IOC 的具体实现。</p><h3
id=211-获取所有的拓展类>2.1.1
获取所有的拓展类</h3><p>我们在通过名称获取拓展类之前,首先需要根据配置文件解析出拓展项名称到拓展类的映射关系表(Map<名称,
拓展类>),之后再根据拓展项名称从映射关系表中取出相应的拓展类即可。相关过程的代码分析如下:</p><div clas [...]
+</span></span></code></pre></div><p>createExtension
方法的逻辑稍复杂一下,包含了如下的步骤:</p><ol><li>通过 getExtensionClasses
获取所有的拓展类</li><li>通过反射创建拓展对象</li><li>向拓展对象中注入依赖</li><li>将拓展对象包裹在相应的 Wrapper
对象中</li><li>初始化拓展对象</li></ol><p>以上步骤中,第一个步骤是加载拓展类的关键,第三和第四个步骤是 Dubbo IOC 与 AOP
的具体实现。在接下来的章节中,将会重点分析 getExtensionClasses 方法的逻辑,以及简单介绍 Dubbo IOC 的具体实现。</p><h4
id=211-获取所有的拓展类>2.1.1
获取所有的拓展类</h4><p>我们在通过名称获取拓展类之前,首先需要根据配置文件解析出拓展项名称到拓展类的映射关系表(Map<名称,
拓展类>),之后再根据拓展项名称从映射关系表中取出相应的拓展类即可。相关过程的代码分析如下:</p><div clas [...]
</span></span><span style=display:flex><span> <span style=color:#586e75>//
从缓存中获取已加载的拓展类
</span></span></span><span style=display:flex><span><span
style=color:#586e75></span> Map<span
style=color:#719e07><</span>String<span style=color:#719e07>,</span>
Class<span style=color:#719e07><?>></span> classes <span
style=color:#719e07>=</span> cachedClasses<span
style=color:#719e07>.</span>get<span style=color:#719e07>();</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>//
双重检查
@@ -904,7 +904,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div><p>如上,loadClass 方法操作了不同的缓存,比如
cachedAdaptiveClass、cachedWrapperClasses 和 cachedNames
等等。除此之外,该方法没有其他什么逻辑了。</p><p>到此,关于缓存类加载的过程就分析完了。整个过程没什么特别复杂的地方,大家按部就班的分析即可,不懂的地方可以调试一下。接下来,我们来聊聊
Dubbo IOC 方面的内容。</p><h3 id=212-dubbo-ioc>2.1.2 Dubbo IOC</h3><p>Dubbo IOC 是通过
setter 方法注入依赖。Dubbo 首先会通过反射获取到实例的所有方法,然后再遍历方法列表,检测方法名是否具有 setter 方法特征。若有,则通过
ObjectFactory 获取依赖对象,最后通过反射调用 setter 方法将依赖设置到目标对象中。整个过程对应的代码如下:</p><div
class=highlight><pre tabindex=0 style=color:#93a1a1 [...]
+</span></span></code></pre></div><p>如上,loadClass 方法操作了不同的缓存,比如
cachedAdaptiveClass、cachedWrapperClasses 和 cachedNames
等等。除此之外,该方法没有其他什么逻辑了。</p><p>到此,关于缓存类加载的过程就分析完了。整个过程没什么特别复杂的地方,大家按部就班的分析即可,不懂的地方可以调试一下。接下来,我们来聊聊
Dubbo IOC 方面的内容。</p><h4 id=212-dubbo-ioc>2.1.2 Dubbo IOC</h4><p>Dubbo IOC 是通过
setter 方法注入依赖。Dubbo 首先会通过反射获取到实例的所有方法,然后再遍历方法列表,检测方法名是否具有 setter 方法特征。若有,则通过
ObjectFactory 获取依赖对象,最后通过反射调用 setter 方法将依赖设置到目标对象中。整个过程对应的代码如下:</p><div
class=highlight><pre tabindex=0 style=color:#93a1a1 [...]
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span
style=color:#719e07>if</span> <span style=color:#719e07>(</span>objectFactory
<span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span><span
style=color:#719e07>)</span> <span style=color:#719e07>{</span>
</span></span><span style=display:flex><span> <span
style=color:#719e07>return</span> instance<span style=color:#719e07>;</span>
@@ -1020,7 +1020,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span><span style=display:flex><span> <span style=color:#586e75>//
编译代码,生成 Class
</span></span></span><span style=display:flex><span><span
style=color:#586e75></span> <span style=color:#719e07>return</span>
compiler<span style=color:#719e07>.</span>compile<span
style=color:#719e07>(</span>code<span style=color:#719e07>,</span>
classLoader<span style=color:#719e07>);</span>
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div><p>createAdaptiveExtensionClass
方法用于生成自适应拓展类,该方法首先会生成自适应拓展类的源码,然后通过 Compiler 实例(Dubbo 默认使用 javassist
作为编译器)编译源码,得到代理类 Class 实例。接下来,我们把重点放在代理类代码生成的逻辑上,其他逻辑大家自行分析。</p><h3
id=221-自适应拓展类代码生成>2.2.1 自适应拓展类代码生成</h3><p>AdaptiveClassCodeGenerator#generate
方法生成扩展类代码</p><div class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><spa [...]
+</span></span></code></pre></div><p>createAdaptiveExtensionClass
方法用于生成自适应拓展类,该方法首先会生成自适应拓展类的源码,然后通过 Compiler 实例(Dubbo 默认使用 javassist
作为编译器)编译源码,得到代理类 Class 实例。接下来,我们把重点放在代理类代码生成的逻辑上,其他逻辑大家自行分析。</p><h4
id=221-自适应拓展类代码生成>2.2.1 自适应拓展类代码生成</h4><p>AdaptiveClassCodeGenerator#generate
方法生成扩展类代码</p><div class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><spa [...]
</span></span><span style=display:flex><span> <span style=color:#586e75>//
如果该接口中没有方法被 @Adaptive 注解修饰,直接抛出异常
</span></span></span><span style=display:flex><span><span
style=color:#586e75></span> <span style=color:#719e07>if</span> <span
style=color:#719e07>(!</span>hasAdaptiveMethod<span
style=color:#719e07>())</span> <span style=color:#719e07>{</span>
</span></span><span style=display:flex><span> <span
style=color:#719e07>throw</span> <span style=color:#719e07>new</span>
IllegalStateException<span style=color:#719e07>(</span><span
style=color:#2aa198>"No adaptive method exist on extension "</span>
<span style=color:#719e07>+</span> type<span
style=color:#719e07>.</span>getName<span style=color:#719e07>()</span> <span
style=color:#719e07>+</span> <span style=color:#2aa198>", refuse to create
the adaptive class!"< [...]
@@ -1100,7 +1100,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
1.检查方法上是否 Adaptive 注解修饰
2.为方法生成代码的时候,参数列表上要有 URL(或参数对象中有 URL)
3.使用 ExtensionLoader.getExtension 获取扩展
-4.执行对应的方法</p><h3 id=223-附一个动态生成代码后的例子>2.2.3 附一个动态生成代码后的例子</h3><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#719e07>package</span>
org.apache.dubbo.common.extension.adaptive<span style=color:#719e07>;</span>
+4.执行对应的方法</p><h4 id=223-附一个动态生成代码后的例子>2.2.3 附一个动态生成代码后的例子</h4><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#719e07>package</span>
org.apache.dubbo.common.extension.adaptive<span style=color:#719e07>;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span
style=color:#719e07>import</span>
org.apache.dubbo.common.extension.ExtensionLoader<span
style=color:#719e07>;</span>
</span></span><span style=display:flex><span>
@@ -1129,7 +1129,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span></span><span style=display:flex><span><span
style=color:#586e75></span> <span style=color:#719e07>return</span>
extension<span style=color:#719e07>.</span>echo<span
style=color:#719e07>(</span>arg0<span style=color:#719e07>,</span> arg1<span
style=color:#719e07>);</span>
</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div><h2 id=3spi-扩展示例>3.SPI 扩展示例</h2><h3
id=31--加载固定扩展类>3.1 加载固定扩展类</h3><h3 id=311-编写-spi-接口及实现类>3.1.1 编写 SPI
接口及实现类</h3><p>不管是 Java SPI,还是 Dubbo 中实现的 SPI,都需要编写接口。不过 Dubbo 中的接口需要被 @SPI
注解修饰。</p><div class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#268bd2>@SPI</span>
+</span></span></code></pre></div><h2 id=3-dubbo-spi-扩展示例>3. Dubbo SPI
扩展示例</h2><h3 id=31--加载固定扩展类>3.1 加载固定扩展类</h3><h4 id=311-编写-spi-接口及实现类>3.1.1 编写
SPI 接口及实现类</h4><p>不管是 Java SPI,还是 Dubbo 中实现的 SPI,都需要编写接口。不过 Dubbo 中的接口需要被 @SPI
注解修饰。</p><div class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#268bd2>@SPI</span>
</span></span><span style=display:flex><span><span
style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span>
<span style=color:#268bd2>DemoSpi</span> <span style=color:#719e07>{</span>
</span></span><span style=display:flex><span> <span
style=color:#dc322f>void</span> <span style=color:#268bd2>say</span><span
style=color:#719e07>();</span>
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
@@ -1149,7 +1149,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span><span style=display:flex><span> optimusPrime<span
style=color:#719e07>.</span>sayHello<span style=color:#719e07>();</span>
</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div><h3 id=32-加载自适应扩展类>3.2 加载自适应扩展类</h3><p>这个以
Protocol 为例进行说明</p><h3 id=321-protocol-接口抽取部分核心方法>3.2.1 Protocol
接口(抽取部分核心方法)</h3><div class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#268bd2>@SPI</span><span style=color:#719e07>(</span><span
style=color:#2aa198>"dubbo"</span><span style=color:#7 [...]
+</span></span></code></pre></div><h3 id=32-加载自适应扩展类>3.2 加载自适应扩展类</h3><p>这个以
Protocol 为例进行说明</p><h4 id=321-protocol-接口抽取部分核心方法>3.2.1 Protocol
接口(抽取部分核心方法)</h4><div class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#268bd2>@SPI</span><span style=color:#719e07>(</span><span
style=color:#2aa198>"dubbo"</span><span style=color:#7 [...]
</span></span><span style=display:flex><span><span
style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span>
<span style=color:#268bd2>Protocol</span> <span style=color:#719e07>{</span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2>@Adaptive</span>
</span></span><span style=display:flex><span> <span
style=color:#719e07><</span>T<span style=color:#719e07>></span>
Exporter<span style=color:#719e07><</span>T<span
style=color:#719e07>></span> <span style=color:#268bd2>export</span><span
style=color:#719e07>(</span>Invoker<span style=color:#719e07><</span>T<span
style=color:#719e07>></span> invoker<span style=color:#719e07>)</span> <span
style=color:#268bd2>throws</span> RpcException<span style=color:#719e07>;</span>
@@ -1171,8 +1171,8 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span><span style=display:flex><span> <span
style=color:#719e07>return</span> exporter<span style=color:#719e07>;</span>
</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div><h3 id=322-将实现类放在特定目录下>3.2.2
将实现类放在特定目录下</h3><p>在 dubbo 中,该配置路径
META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-text data-lang=text><span
style=display:flex><span>dubbo=org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol
-</span></span></code></pre></div><p>需要说明一点的是,在 dubbo 中,并不是直接使用 DubboProtocol
的,而是使用的是其包装类。</p><h3 id=323-使用>3.2.3 使用</h3><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span
style=color:#268bd2>DubboAdaptiveTest</span> <span style=color:#719e07>{</span>
+</span></span></code></pre></div><h4 id=322-将实现类放在特定目录下>3.2.2
将实现类放在特定目录下</h4><p>在 dubbo 中,该配置路径
META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-text data-lang=text><span
style=display:flex><span>dubbo=org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol
+</span></span></code></pre></div><p>需要说明一点的是,在 dubbo 中,并不是直接使用 DubboProtocol
的,而是使用的是其包装类。</p><h4 id=323-使用>3.2.3 使用</h4><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span
style=color:#268bd2>DubboAdaptiveTest</span> <span style=color:#719e07>{</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2>@Test</span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span
style=color:#268bd2>sayHello</span><span style=color:#719e07>()</span> <span
style=color:#268bd2>throws</span> Exception <span style=color:#719e07>{</span>
@@ -1182,10 +1182,10 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
</span></span></code></pre></div><div id=pre-footer><h2>反馈</h2><p
class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4
feedback--yes">是</button>
-<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
+<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dubbo-spi.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.
[...]
<a
href="https://github.com/apache/dubbo-website/issues/new?title=%e6%89%a9%e5%b1%95%e7%82%b9%e5%bc%80%e5%8f%91%e6%8c%87%e5%8d%97"
target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
-<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div></main><div class="d-none d-xl-block
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a
href=#1简介>1.简介</a><ul><li><a href=#11-加载固定的扩展类>1.1 加载固定的扩展类</a></li><li><a
href=#12-加载自适应扩展类>1.2 加载自适应扩展类</a></li></ul></li><li><a
href=#2-dubbo-spi-源码分析>2. Dubbo SPI 源码分析</a><ul><li><a href=#21-加载固定的扩展类>2.1
加载固定的扩展类</a></li><li><a href=#211-获取所有的拓展类>2.1.1 获取所有的拓展类</a></li> [...]
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div></main><div class="d-none d-xl-block
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a
href=#1-dubbo-spi-扩展简介>1. Dubbo SPI 扩展简介</a><ul><li><a href=#11-加载固定的扩展类>1.1
加载固定的扩展类</a></li><li><a href=#12-加载自适应扩展类>1.2 加载自适应扩展类</a></li></ul></li><li><a
href=#2-dubbo-spi-源码分析>2. Dubbo SPI 源码分析</a><ul><li><a href=#21-加载固定的扩展类>2.1
加载固定的扩展类</a></li><li><a href=#22-加载自适应扩展 [...]
<script src=/js/bootstrap.min.js
integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy
crossorigin=anonymous></script>
<script
src=/js/main.min.a4534a01940be8c082c4c0e6777b61df9884f202b61c9519352adb6d1039d5aa.js
integrity="sha256-pFNKAZQL6MCCxMDmd3th35iE8gK2HJUZNSrbbRA51ao="
crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script>
diff --git
a/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/index.xml
b/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/index.xml
index 2930adbfc2..6f95dbe9df 100644
--- a/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/index.xml
+++ b/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/index.xml
@@ -1743,7 +1743,7 @@
</span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.qos.permission.PermissionChecker:</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span>qosPermissionChecker<span
style="color:#719e07">=</span><span
style="color:#2aa198">com.xxx.XxxPermissionChecker</span>
</span></span></code></pre></div></description></item><item><title>Overview:
扩展点开发指南</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dubbo-spi/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dubbo-spi/</guid><description>
-<h2 id="1简介">1.简介</h2>
+<h2 id="1-dubbo-spi-扩展简介">1. Dubbo SPI 扩展简介</h2>
<p>SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI
的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过
SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件。不过,Dubbo 并未使用
Java 原生的 SPI 机制,而是对其进行了增强,使其能够更好的满足需求。在 Dubbo 中,SPI 是一个非常重要的模块。基于 SPI,我们可以很容易的对
Dubbo 进行拓展。
Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另一种是加载自适应扩展类。这两种方式会在下面详细的介绍。
需要特别注意的是: 在 Dubbo 中,基于 SPI 扩展加载的类是单例的。</p>
@@ -1847,7 +1847,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
<li>初始化拓展对象</li>
</ol>
<p>以上步骤中,第一个步骤是加载拓展类的关键,第三和第四个步骤是 Dubbo IOC 与 AOP 的具体实现。在接下来的章节中,将会重点分析
getExtensionClasses 方法的逻辑,以及简单介绍 Dubbo IOC 的具体实现。</p>
-<h3 id="211-获取所有的拓展类">2.1.1 获取所有的拓展类</h3>
+<h4 id="211-获取所有的拓展类">2.1.1 获取所有的拓展类</h4>
<p>我们在通过名称获取拓展类之前,首先需要根据配置文件解析出拓展项名称到拓展类的映射关系表(Map&lt;名称,
拓展类&gt;),之后再根据拓展项名称从映射关系表中取出相应的拓展类即可。相关过程的代码分析如下:</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span style="color:#268bd2">private</span>
Map<span style="color:#719e07">&lt;</span>String<span
style="color:#719e07">,</span> Class<span
style="color:#719e07">&lt;?&gt;&gt;</span>
getExtensionClasses<span style="color:#719e [...]
</span></span><span style="display:flex;"><span> <span
style="color:#586e75">// 从缓存中获取已加载的拓展类
@@ -2004,7 +2004,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span><span style="display:flex;"><span><span
style="color:#719e07">}</span>
</span></span></code></pre></div><p>如上,loadClass
方法操作了不同的缓存,比如 cachedAdaptiveClass、cachedWrapperClasses 和 cachedNames
等等。除此之外,该方法没有其他什么逻辑了。</p>
<p>到此,关于缓存类加载的过程就分析完了。整个过程没什么特别复杂的地方,大家按部就班的分析即可,不懂的地方可以调试一下。接下来,我们来聊聊
Dubbo IOC 方面的内容。</p>
-<h3 id="212-dubbo-ioc">2.1.2 Dubbo IOC</h3>
+<h4 id="212-dubbo-ioc">2.1.2 Dubbo IOC</h4>
<p>Dubbo IOC 是通过 setter 方法注入依赖。Dubbo 首先会通过反射获取到实例的所有方法,然后再遍历方法列表,检测方法名是否具有
setter 方法特征。若有,则通过 ObjectFactory 获取依赖对象,最后通过反射调用 setter
方法将依赖设置到目标对象中。整个过程对应的代码如下:</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span style="color:#268bd2">private</span>
T <span style="color:#268bd2">injectExtension</span><span
style="color:#719e07">(</span>T instance<span
style="color:#719e07">)</span> <span style="color:#719e07">{</span>
</span></span><span style="display:flex;"><span>
@@ -2143,7 +2143,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span></span><span style="display:flex;"><span><span
style="color:#586e75"></span> <span
style="color:#719e07">return</span> compiler<span
style="color:#719e07">.</span>compile<span
style="color:#719e07">(</span>code<span style="color:#719e07">,</span>
classLoader<span style="color:#719e07">);</span>
</span></span><span style="display:flex;"><span><span
style="color:#719e07">}</span>
</span></span></code></pre></div><p>createAdaptiveExtensionClass
方法用于生成自适应拓展类,该方法首先会生成自适应拓展类的源码,然后通过 Compiler 实例(Dubbo 默认使用 javassist
作为编译器)编译源码,得到代理类 Class 实例。接下来,我们把重点放在代理类代码生成的逻辑上,其他逻辑大家自行分析。</p>
-<h3 id="221-自适应拓展类代码生成">2.2.1 自适应拓展类代码生成</h3>
+<h4 id="221-自适应拓展类代码生成">2.2.1 自适应拓展类代码生成</h4>
<p>AdaptiveClassCodeGenerator#generate 方法生成扩展类代码</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span style="color:#268bd2">public</span>
String <span style="color:#268bd2">generate</span><span
style="color:#719e07">()</span> <span style="color:#719e07">{</span>
</span></span><span style="display:flex;"><span> <span
style="color:#586e75">// 如果该接口中没有方法被 @Adaptive 注解修饰,直接抛出异常
@@ -2229,7 +2229,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
2.为方法生成代码的时候,参数列表上要有 URL(或参数对象中有 URL)
3.使用 ExtensionLoader.getExtension 获取扩展
4.执行对应的方法</p>
-<h3 id="223-附一个动态生成代码后的例子">2.2.3 附一个动态生成代码后的例子</h3>
+<h4 id="223-附一个动态生成代码后的例子">2.2.3 附一个动态生成代码后的例子</h4>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span style="color:#719e07">package</span>
org.apache.dubbo.common.extension.adaptive<span
style="color:#719e07">;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span
style="color:#719e07">import</span>
org.apache.dubbo.common.extension.ExtensionLoader<span
style="color:#719e07">;</span>
@@ -2259,9 +2259,9 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span></span><span style="display:flex;"><span><span
style="color:#586e75"></span> <span
style="color:#719e07">return</span> extension<span
style="color:#719e07">.</span>echo<span
style="color:#719e07">(</span>arg0<span style="color:#719e07">,</span>
arg1<span style="color:#719e07">);</span>
</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
</span></span><span style="display:flex;"><span><span
style="color:#719e07">}</span>
-</span></span></code></pre></div><h2 id="3spi-扩展示例">3.SPI
扩展示例</h2>
+</span></span></code></pre></div><h2
id="3-dubbo-spi-扩展示例">3. Dubbo SPI 扩展示例</h2>
<h3 id="31--加载固定扩展类">3.1 加载固定扩展类</h3>
-<h3 id="311-编写-spi-接口及实现类">3.1.1 编写 SPI 接口及实现类</h3>
+<h4 id="311-编写-spi-接口及实现类">3.1.1 编写 SPI 接口及实现类</h4>
<p>不管是 Java SPI,还是 Dubbo 中实现的 SPI,都需要编写接口。不过 Dubbo 中的接口需要被 @SPI 注解修饰。</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span style="color:#268bd2">@SPI</span>
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">public</span> <span
style="color:#268bd2">interface</span> <span
style="color:#268bd2">DemoSpi</span> <span
style="color:#719e07">{</span>
@@ -2288,7 +2288,7 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span><span style="display:flex;"><span><span
style="color:#719e07">}</span>
</span></span></code></pre></div><h3 id="32-加载自适应扩展类">3.2
加载自适应扩展类</h3>
<p>这个以 Protocol 为例进行说明</p>
-<h3 id="321-protocol-接口抽取部分核心方法">3.2.1 Protocol 接口(抽取部分核心方法)</h3>
+<h4 id="321-protocol-接口抽取部分核心方法">3.2.1 Protocol 接口(抽取部分核心方法)</h4>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span
style="color:#268bd2">@SPI</span><span
style="color:#719e07">(</span><span
style="color:#2aa198">&#34;dubbo&#34;</span><span
style="color:#719e07">)</span>
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">public</span> <span
style="color:#268bd2">interface</span> <span
style="color:#268bd2">Protocol</span> <span
style="color:#719e07">{</span>
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">@Adaptive</span>
@@ -2311,11 +2311,11 @@ Dubbo 中,SPI 主要有两种用法,一种是加载固定的扩展类,另
</span></span><span style="display:flex;"><span> <span
style="color:#719e07">return</span> exporter<span
style="color:#719e07">;</span>
</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
</span></span><span style="display:flex;"><span><span
style="color:#719e07">}</span>
-</span></span></code></pre></div><h3
id="322-将实现类放在特定目录下">3.2.2 将实现类放在特定目录下</h3>
+</span></span></code></pre></div><h4
id="322-将实现类放在特定目录下">3.2.2 将实现类放在特定目录下</h4>
<p>在 dubbo 中,该配置路径
META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-text" data-lang="text"><span
style="display:flex;"><span>dubbo=org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol
</span></span></code></pre></div><p>需要说明一点的是,在 dubbo
中,并不是直接使用 DubboProtocol 的,而是使用的是其包装类。</p>
-<h3 id="323-使用">3.2.3 使用</h3>
+<h4 id="323-使用">3.2.3 使用</h4>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span style="color:#268bd2">public</span>
<span style="color:#268bd2">class</span> <span
style="color:#268bd2">DubboAdaptiveTest</span> <span
style="color:#719e07">{</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">@Test</span>
diff --git a/zh-cn/sitemap.xml b/zh-cn/sitemap.xml
index b48dfdb459..44799b2d9e 100644
--- a/zh-cn/sitemap.xml
+++ b/zh-cn/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://dubbo.apache.org/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E5%8D%87%E7%BA%A7-dubbo3-%E5%85%A8%E9%9D%A2%E5%8F%96%E4%BB%A3-hsf2/</loc><lastmod>2023-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://dubbo.apache.org/zh-cn/overview/mannual/jav
[...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://dubbo.apache.org/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E5%8D%87%E7%BA%A7-dubbo3-%E5%85%A8%E9%9D%A2%E5%8F%96%E4%BB%A3-hsf2/</loc><lastmod>2023-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://dubbo.apache.org/zh-cn/overview/mannual/jav
[...]
\ No newline at end of file