Springboot項(xiàng)目Aop與攔截器與過(guò)濾器橫向?qū)Ρ?/h1>
更新時(shí)間:2023年03月28日 09:40:33 作者:凡夫販夫
前三篇文章已經(jīng)介紹過(guò)Springboot項(xiàng)目如何實(shí)現(xiàn)Aop,攔截器和過(guò)濾齊功能,這篇文章主要介紹三者的橫向?qū)Ρ龋疚挠幸欢ǖ膮⒖純r(jià)值,感興趣的小伙伴可以參考閱讀
前言
偉人曾經(jīng)說(shuō)過(guò),沒(méi)有調(diào)查就沒(méi)有發(fā)言權(quán)(好像是偉人說(shuō)的,不管誰(shuí)說(shuō)的,這句話(huà)是正確的),有些東西看著簡(jiǎn)單,張口就來(lái),但很有可能是錯(cuò)的。我個(gè)人的經(jīng)驗(yàn)是,aop、過(guò)濾器、攔截器的實(shí)現(xiàn)方式很簡(jiǎn)單,一學(xué)就會(huì),不用就忘,忘了再學(xué),學(xué)了再忘,如此循環(huán)內(nèi)耗何必呢?因此,如果你和我一樣,有一顆強(qiáng)烈的好奇之心,那么不管多簡(jiǎn)單,動(dòng)手敲起來(lái)吧,溫故而知新呢。
功能特性對(duì)比
過(guò)濾器
過(guò)濾器(Filter)是與servlet相關(guān)聯(lián)的一個(gè)接口,主要適用于java web項(xiàng)目中,依賴(lài)于Servlet容器,是利用java的回調(diào)機(jī)制來(lái)實(shí)現(xiàn)過(guò)濾攔截來(lái)自瀏覽器端的http請(qǐng)求,可以攔截到訪問(wèn)URL對(duì)應(yīng)的方法的請(qǐng)求和響應(yīng)(ServletRequest request, ServletResponse response),但是不能對(duì)請(qǐng)求和響應(yīng)信息中的值進(jìn)行修改;一般用于設(shè)置字符編碼、鑒權(quán)操作等;如果想要做到更細(xì)一點(diǎn)的類(lèi)和方法或者是在非servlet環(huán)境中使用,則是做不到的;所以凡是依賴(lài)Servlet容器的環(huán)境,過(guò)濾器都可以使用,如Struts2、SpringMVC;

攔截器
攔截器的(HandlerInterceptor)使用范圍以及功能和過(guò)濾器很類(lèi)似,但是也是有區(qū)別的。首先,攔截器(HandlerInterceptor)適用于SpringMVC中,因?yàn)镠andlerInterceptor接口是SpringMVC相關(guān)的一個(gè)接口,而實(shí)現(xiàn)java Web項(xiàng)目,SpringMVC是目前的首選選項(xiàng),但不是唯一選項(xiàng),還有struts2等;因此,如果是非SpingMVC的項(xiàng)目,HandlerInterceptor無(wú)法使用的;其次,和過(guò)濾器一樣,攔截器可以攔截到訪問(wèn)URL對(duì)應(yīng)的方法的請(qǐng)求和響應(yīng)(ServletRequest request, ServletResponse response),但是不能對(duì)請(qǐng)求和響應(yīng)信息中的值進(jìn)行修改;一般用于設(shè)置字符編碼、鑒權(quán)操作等;如果想要做到更細(xì)一點(diǎn)的類(lèi)和方法或者是在非servlet環(huán)境中使用,則也是是做不到的;
總之,過(guò)濾器和攔截器的功能很類(lèi)似,但是攔截器的適用范圍比過(guò)濾器更??;

Spring AOP
AOP (Aspect Orient Programming),直譯過(guò)來(lái)就是 面向切面編程,AOP 是一種編程思想,是面向?qū)ο缶幊蹋∣OP)的一種補(bǔ)充。面向切面編程,可以實(shí)現(xiàn)在不修改源代碼的情況下給程序動(dòng)態(tài)統(tǒng)一添加額外功能的一種技術(shù),AOP可以攔截指定的方法并且對(duì)方法增強(qiáng),而且無(wú)需侵入到業(yè)務(wù)代碼中,使業(yè)務(wù)與非業(yè)務(wù)處理邏輯分離;而SpringAOP,則是AOP的一種具體實(shí)現(xiàn),Spring內(nèi)部對(duì)SpringAOP的應(yīng)用最經(jīng)典的場(chǎng)景就是Spring的事務(wù),通過(guò)事務(wù)注解的配置,Spring會(huì)自動(dòng)在業(yè)務(wù)方法中開(kāi)啟、提交業(yè)務(wù),并且在業(yè)務(wù)處理失敗時(shí),執(zhí)行相應(yīng)的回滾策略;與過(guò)濾器、攔截器相比,更加重要的是其適用范圍不再局限于SpringMVC項(xiàng)目,可以在任意一層定義一個(gè)切點(diǎn),織入相應(yīng)的操作,并且還可以改變返回值;

代碼實(shí)現(xiàn)
過(guò)濾器實(shí)現(xiàn)
傳送門(mén):Springboot項(xiàng)目快速實(shí)現(xiàn)過(guò)濾器功能
攔截器實(shí)現(xiàn)
傳送門(mén):Springboo項(xiàng)目快速實(shí)現(xiàn)攔截器功能
AOP實(shí)現(xiàn)
傳送門(mén):Springboot項(xiàng)目快速實(shí)現(xiàn)Aop功能
實(shí)現(xiàn)示例源代碼地址:
https://gitcode.net/fox9916/fanfu-web.git(branch:Aop+filter+interceptor)
在實(shí)現(xiàn)示例中,主要的過(guò)濾器實(shí)現(xiàn)類(lèi)、攔截器實(shí)現(xiàn)類(lèi)和AOP實(shí)現(xiàn)類(lèi),與涉及到的接口之間的關(guān)系如下:

驗(yàn)證結(jié)果
匹配中同一個(gè)目標(biāo)(PersonController#getPerson())的情況下,過(guò)濾器、攔截器、SpringAOP的執(zhí)行優(yōu)先級(jí)是:
過(guò)濾器>攔截器>SpringAOP,執(zhí)行順序是先進(jìn)后出;

工作原理
從驗(yàn)證結(jié)果的輸出日志中,已經(jīng)可以看到,在匹配中同一目標(biāo)時(shí),過(guò)濾器、攔截器、SpringAOP的執(zhí)行優(yōu)先級(jí)是:過(guò)濾器>攔截器>SpringAOP,執(zhí)行順序是先進(jìn)后出,具體的不同則體現(xiàn)在以下幾個(gè)方面:
1、作用域不同
- 過(guò)濾器依賴(lài)于servlet容器,只能在 servlet容器,web環(huán)境下使用,對(duì)請(qǐng)求-響應(yīng)入口處進(jìn)行過(guò)濾攔截;
- 攔截器依賴(lài)于springMVC,可以在SpringMVC項(xiàng)目中使用,而SpringMVC的核心是DispatcherServlet,而DispatcherServlet又屬于Servlet的子類(lèi),因此作用域和過(guò)濾器類(lèi)似;
- SpringAOP對(duì)作用域沒(méi)有限制,只要定義好切點(diǎn),可以在請(qǐng)求-響應(yīng)的入口層(controller層)攔截處理,也可以在請(qǐng)求的業(yè)務(wù)處理層(service層)攔截處理;
2、顆粒度的不同
- 過(guò)濾器的控制顆粒度比較粗,只能在doFilter()中對(duì)請(qǐng)求和響應(yīng)進(jìn)行過(guò)慮和攔截處理;
- 攔截器提供更精細(xì)顆粒度的控制,有preHandle()、postHandle()、afterCompletion(),可以在controller對(duì)請(qǐng)求處理之前、請(qǐng)求處理后、請(qǐng)求響應(yīng)完畢織入一些業(yè)務(wù)操作;
- SpringAOP,提供了前置通知、后置通知、返回后通知、異常通知、環(huán)繞通知,比攔截器更加精細(xì)化的顆粒度控制,甚至可以修改返回值;
總結(jié)
過(guò)濾器、攔截器、AOP本質(zhì)上來(lái)講,都是面向切面編程的實(shí)踐,只是在功能特性、適用范圍、實(shí)現(xiàn)細(xì)節(jié)上有一些區(qū)別。一般情況下,過(guò)濾器能實(shí)現(xiàn)的功能,攔截器也可以實(shí)現(xiàn);過(guò)濾器、攔截器可以實(shí)現(xiàn)的功能,AOP也可以實(shí)現(xiàn);那么在業(yè)務(wù)開(kāi)發(fā)過(guò)程中作選型的時(shí)候,是不是直接用AOP就完了,其實(shí)我認(rèn)為不能這樣,還是需要根據(jù)具體的業(yè)務(wù)環(huán)境和技術(shù)環(huán)境進(jìn)行選擇,殺雞可必要用牛刀,你說(shuō)呢?
以上就是Springboot項(xiàng)目Aop與攔截器與過(guò)濾器橫向?qū)Ρ鹊脑敿?xì)內(nèi)容,更多關(guān)于Aop與攔截器與過(guò)濾器的對(duì)比的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
-
Struts2 通過(guò)ognl表達(dá)式實(shí)現(xiàn)投影
這篇文章主要介紹了Struts2 通過(guò)ognl表達(dá)式實(shí)現(xiàn)投影,具有一定參考價(jià)值,需要的朋友可以了解下。 2017-09-09
-
詳解Spring AOP 攔截器的基本實(shí)現(xiàn)
本篇文章主要介紹了詳解Spring AOP 攔截器的基本實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
2017-03-03
-
Spring?Boot自定義監(jiān)控指標(biāo)的詳細(xì)過(guò)程
這篇文章主要介紹了Spring?Boot如何自定義監(jiān)控指標(biāo)?,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下 2023-03-03
-
Java中過(guò)濾器、監(jiān)聽(tīng)器和攔截器的區(qū)別詳解
這篇文章主要介紹了Java中過(guò)濾器、監(jiān)聽(tīng)器和攔截器的區(qū)別詳解,有些朋友可能不了解過(guò)濾器、監(jiān)聽(tīng)器和攔截器的區(qū)別,本文就來(lái)詳細(xì)講一下,相信看完你會(huì)有所收獲,需要的朋友可以參考下 2024-01-01
-
Java方法的參數(shù)傳遞機(jī)制實(shí)例詳解
這篇文章主要介紹了Java方法的參數(shù)傳遞機(jī)制,結(jié)合實(shí)例形式詳細(xì)分析了java方法參數(shù)傳遞機(jī)制原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下 2019-09-09
-
Lombok的詳細(xì)使用及優(yōu)缺點(diǎn)總結(jié)
最近在學(xué)Mybatis,接觸到了Lombok的使用,所以寫(xiě)一篇文章記錄一下,包括lombok的安裝及使用優(yōu)缺點(diǎn),感興趣的朋友跟隨小編一起看看吧 2021-07-07
-
java使用定時(shí)器實(shí)現(xiàn)監(jiān)聽(tīng)數(shù)據(jù)變化
這篇文章主要為大家詳細(xì)介紹了Java如何使用定時(shí)器監(jiān)聽(tīng)數(shù)據(jù)變化,當(dāng)滿(mǎn)足某個(gè)條件時(shí)(例如沒(méi)有數(shù)據(jù)更新)自動(dòng)執(zhí)行某項(xiàng)任務(wù),有興趣的可以了解下 2023-11-11
-
Springboot如何實(shí)現(xiàn)自定義異常數(shù)據(jù)
這篇文章主要介紹了Springboot如何實(shí)現(xiàn)自定義異常數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下 2020-09-09
-
使用IDEA創(chuàng)建java項(xiàng)目的步驟詳解(hello word)
這篇文章主要介紹了使用IDEA創(chuàng)建java項(xiàng)目的步驟詳解(hello word),本文分步驟通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下 2020-12-12
最新評(píng)論
前言
偉人曾經(jīng)說(shuō)過(guò),沒(méi)有調(diào)查就沒(méi)有發(fā)言權(quán)(好像是偉人說(shuō)的,不管誰(shuí)說(shuō)的,這句話(huà)是正確的),有些東西看著簡(jiǎn)單,張口就來(lái),但很有可能是錯(cuò)的。我個(gè)人的經(jīng)驗(yàn)是,aop、過(guò)濾器、攔截器的實(shí)現(xiàn)方式很簡(jiǎn)單,一學(xué)就會(huì),不用就忘,忘了再學(xué),學(xué)了再忘,如此循環(huán)內(nèi)耗何必呢?因此,如果你和我一樣,有一顆強(qiáng)烈的好奇之心,那么不管多簡(jiǎn)單,動(dòng)手敲起來(lái)吧,溫故而知新呢。
功能特性對(duì)比
過(guò)濾器
過(guò)濾器(Filter)是與servlet相關(guān)聯(lián)的一個(gè)接口,主要適用于java web項(xiàng)目中,依賴(lài)于Servlet容器,是利用java的回調(diào)機(jī)制來(lái)實(shí)現(xiàn)過(guò)濾攔截來(lái)自瀏覽器端的http請(qǐng)求,可以攔截到訪問(wèn)URL對(duì)應(yīng)的方法的請(qǐng)求和響應(yīng)(ServletRequest request, ServletResponse response),但是不能對(duì)請(qǐng)求和響應(yīng)信息中的值進(jìn)行修改;一般用于設(shè)置字符編碼、鑒權(quán)操作等;如果想要做到更細(xì)一點(diǎn)的類(lèi)和方法或者是在非servlet環(huán)境中使用,則是做不到的;所以凡是依賴(lài)Servlet容器的環(huán)境,過(guò)濾器都可以使用,如Struts2、SpringMVC;
攔截器
攔截器的(HandlerInterceptor)使用范圍以及功能和過(guò)濾器很類(lèi)似,但是也是有區(qū)別的。首先,攔截器(HandlerInterceptor)適用于SpringMVC中,因?yàn)镠andlerInterceptor接口是SpringMVC相關(guān)的一個(gè)接口,而實(shí)現(xiàn)java Web項(xiàng)目,SpringMVC是目前的首選選項(xiàng),但不是唯一選項(xiàng),還有struts2等;因此,如果是非SpingMVC的項(xiàng)目,HandlerInterceptor無(wú)法使用的;其次,和過(guò)濾器一樣,攔截器可以攔截到訪問(wèn)URL對(duì)應(yīng)的方法的請(qǐng)求和響應(yīng)(ServletRequest request, ServletResponse response),但是不能對(duì)請(qǐng)求和響應(yīng)信息中的值進(jìn)行修改;一般用于設(shè)置字符編碼、鑒權(quán)操作等;如果想要做到更細(xì)一點(diǎn)的類(lèi)和方法或者是在非servlet環(huán)境中使用,則也是是做不到的;
總之,過(guò)濾器和攔截器的功能很類(lèi)似,但是攔截器的適用范圍比過(guò)濾器更??;
Spring AOP
AOP (Aspect Orient Programming),直譯過(guò)來(lái)就是 面向切面編程,AOP 是一種編程思想,是面向?qū)ο缶幊蹋∣OP)的一種補(bǔ)充。面向切面編程,可以實(shí)現(xiàn)在不修改源代碼的情況下給程序動(dòng)態(tài)統(tǒng)一添加額外功能的一種技術(shù),AOP可以攔截指定的方法并且對(duì)方法增強(qiáng),而且無(wú)需侵入到業(yè)務(wù)代碼中,使業(yè)務(wù)與非業(yè)務(wù)處理邏輯分離;而SpringAOP,則是AOP的一種具體實(shí)現(xiàn),Spring內(nèi)部對(duì)SpringAOP的應(yīng)用最經(jīng)典的場(chǎng)景就是Spring的事務(wù),通過(guò)事務(wù)注解的配置,Spring會(huì)自動(dòng)在業(yè)務(wù)方法中開(kāi)啟、提交業(yè)務(wù),并且在業(yè)務(wù)處理失敗時(shí),執(zhí)行相應(yīng)的回滾策略;與過(guò)濾器、攔截器相比,更加重要的是其適用范圍不再局限于SpringMVC項(xiàng)目,可以在任意一層定義一個(gè)切點(diǎn),織入相應(yīng)的操作,并且還可以改變返回值;
代碼實(shí)現(xiàn)
過(guò)濾器實(shí)現(xiàn)
傳送門(mén):Springboot項(xiàng)目快速實(shí)現(xiàn)過(guò)濾器功能
攔截器實(shí)現(xiàn)
傳送門(mén):Springboo項(xiàng)目快速實(shí)現(xiàn)攔截器功能
AOP實(shí)現(xiàn)
傳送門(mén):Springboot項(xiàng)目快速實(shí)現(xiàn)Aop功能
實(shí)現(xiàn)示例源代碼地址:
https://gitcode.net/fox9916/fanfu-web.git(branch:Aop+filter+interceptor)
在實(shí)現(xiàn)示例中,主要的過(guò)濾器實(shí)現(xiàn)類(lèi)、攔截器實(shí)現(xiàn)類(lèi)和AOP實(shí)現(xiàn)類(lèi),與涉及到的接口之間的關(guān)系如下:
驗(yàn)證結(jié)果
匹配中同一個(gè)目標(biāo)(PersonController#getPerson())的情況下,過(guò)濾器、攔截器、SpringAOP的執(zhí)行優(yōu)先級(jí)是:
過(guò)濾器>攔截器>SpringAOP,執(zhí)行順序是先進(jìn)后出;
工作原理
從驗(yàn)證結(jié)果的輸出日志中,已經(jīng)可以看到,在匹配中同一目標(biāo)時(shí),過(guò)濾器、攔截器、SpringAOP的執(zhí)行優(yōu)先級(jí)是:過(guò)濾器>攔截器>SpringAOP,執(zhí)行順序是先進(jìn)后出,具體的不同則體現(xiàn)在以下幾個(gè)方面:
1、作用域不同
- 過(guò)濾器依賴(lài)于servlet容器,只能在 servlet容器,web環(huán)境下使用,對(duì)請(qǐng)求-響應(yīng)入口處進(jìn)行過(guò)濾攔截;
- 攔截器依賴(lài)于springMVC,可以在SpringMVC項(xiàng)目中使用,而SpringMVC的核心是DispatcherServlet,而DispatcherServlet又屬于Servlet的子類(lèi),因此作用域和過(guò)濾器類(lèi)似;
- SpringAOP對(duì)作用域沒(méi)有限制,只要定義好切點(diǎn),可以在請(qǐng)求-響應(yīng)的入口層(controller層)攔截處理,也可以在請(qǐng)求的業(yè)務(wù)處理層(service層)攔截處理;
2、顆粒度的不同
- 過(guò)濾器的控制顆粒度比較粗,只能在doFilter()中對(duì)請(qǐng)求和響應(yīng)進(jìn)行過(guò)慮和攔截處理;
- 攔截器提供更精細(xì)顆粒度的控制,有preHandle()、postHandle()、afterCompletion(),可以在controller對(duì)請(qǐng)求處理之前、請(qǐng)求處理后、請(qǐng)求響應(yīng)完畢織入一些業(yè)務(wù)操作;
- SpringAOP,提供了前置通知、后置通知、返回后通知、異常通知、環(huán)繞通知,比攔截器更加精細(xì)化的顆粒度控制,甚至可以修改返回值;
總結(jié)
過(guò)濾器、攔截器、AOP本質(zhì)上來(lái)講,都是面向切面編程的實(shí)踐,只是在功能特性、適用范圍、實(shí)現(xiàn)細(xì)節(jié)上有一些區(qū)別。一般情況下,過(guò)濾器能實(shí)現(xiàn)的功能,攔截器也可以實(shí)現(xiàn);過(guò)濾器、攔截器可以實(shí)現(xiàn)的功能,AOP也可以實(shí)現(xiàn);那么在業(yè)務(wù)開(kāi)發(fā)過(guò)程中作選型的時(shí)候,是不是直接用AOP就完了,其實(shí)我認(rèn)為不能這樣,還是需要根據(jù)具體的業(yè)務(wù)環(huán)境和技術(shù)環(huán)境進(jìn)行選擇,殺雞可必要用牛刀,你說(shuō)呢?
以上就是Springboot項(xiàng)目Aop與攔截器與過(guò)濾器橫向?qū)Ρ鹊脑敿?xì)內(nèi)容,更多關(guān)于Aop與攔截器與過(guò)濾器的對(duì)比的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Struts2 通過(guò)ognl表達(dá)式實(shí)現(xiàn)投影
這篇文章主要介紹了Struts2 通過(guò)ognl表達(dá)式實(shí)現(xiàn)投影,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09詳解Spring AOP 攔截器的基本實(shí)現(xiàn)
本篇文章主要介紹了詳解Spring AOP 攔截器的基本實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03Spring?Boot自定義監(jiān)控指標(biāo)的詳細(xì)過(guò)程
這篇文章主要介紹了Spring?Boot如何自定義監(jiān)控指標(biāo)?,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Java中過(guò)濾器、監(jiān)聽(tīng)器和攔截器的區(qū)別詳解
這篇文章主要介紹了Java中過(guò)濾器、監(jiān)聽(tīng)器和攔截器的區(qū)別詳解,有些朋友可能不了解過(guò)濾器、監(jiān)聽(tīng)器和攔截器的區(qū)別,本文就來(lái)詳細(xì)講一下,相信看完你會(huì)有所收獲,需要的朋友可以參考下2024-01-01Java方法的參數(shù)傳遞機(jī)制實(shí)例詳解
這篇文章主要介紹了Java方法的參數(shù)傳遞機(jī)制,結(jié)合實(shí)例形式詳細(xì)分析了java方法參數(shù)傳遞機(jī)制原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2019-09-09Lombok的詳細(xì)使用及優(yōu)缺點(diǎn)總結(jié)
最近在學(xué)Mybatis,接觸到了Lombok的使用,所以寫(xiě)一篇文章記錄一下,包括lombok的安裝及使用優(yōu)缺點(diǎn),感興趣的朋友跟隨小編一起看看吧2021-07-07java使用定時(shí)器實(shí)現(xiàn)監(jiān)聽(tīng)數(shù)據(jù)變化
這篇文章主要為大家詳細(xì)介紹了Java如何使用定時(shí)器監(jiān)聽(tīng)數(shù)據(jù)變化,當(dāng)滿(mǎn)足某個(gè)條件時(shí)(例如沒(méi)有數(shù)據(jù)更新)自動(dòng)執(zhí)行某項(xiàng)任務(wù),有興趣的可以了解下2023-11-11Springboot如何實(shí)現(xiàn)自定義異常數(shù)據(jù)
這篇文章主要介紹了Springboot如何實(shí)現(xiàn)自定義異常數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09使用IDEA創(chuàng)建java項(xiàng)目的步驟詳解(hello word)
這篇文章主要介紹了使用IDEA創(chuàng)建java項(xiàng)目的步驟詳解(hello word),本文分步驟通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12