BAT面試題典:“子類” 可以繼承到 “父類” 上的注解嗎?

image.png

子類重寫父類方法后,可以繼承方法上的注解嗎?

image.png

這個(gè)不急,讓我來分析一下,假設(shè)有如下注解:

image.png
  • 定義被注解的類


    image.png
  • 子類直接繼承父類


    image.png
  • 獲取父子類和方法的注解信息,并輸出注解的value屬性的值


    image.png
  • 日志輸出


    image.png
  • 再看一遍控制臺(tái)信息


    image.png

可見使用@Inherited只能實(shí)現(xiàn)類上的注解繼承。

那么如何實(shí)現(xiàn)方法上注解的繼承呢?

最簡(jiǎn)單暴力地,可通過反射技術(shù),在繼承鏈找到對(duì)應(yīng)方法上的注解。但這樣很麻煩,還需要考慮橋接方法。幸好Spring足夠強(qiáng)大,提供了AnnotatedElementUtils類。

對(duì)@Inherited的支持

遵循get語義的方法將遵循Java的@Inherited注解的約定,除了在本地聲明的批注(包括自定義組成的注解)優(yōu)于繼承的注解之外。相反,遵循find語義的方法將完全忽略@Inherited的存在,因?yàn)閒ind搜索算法手動(dòng)遍歷類型和方法層次結(jié)構(gòu),從而隱式支持注解繼承,而無需@Inherited。

Find V.S Get Semantics

此類中的方法使用的搜索算法遵循find或get語義。

Get 語義

僅限于搜索存在于AnnotatedElement上的注解(即在本地聲明或繼承)或在AnnotatedElement上方的注解層次結(jié)構(gòu)中聲明的注釋。

Find 語義

更加詳盡,提供了獲取語義以及對(duì)以下內(nèi)容的支持:

  • 搜索接口(如果帶注釋的元素是類)
  • 搜索超類(如果帶注釋的元素是一個(gè)類)
  • 解析橋接方法(如果帶注釋的元素是方法)
  • 如果帶注解的元素是方法,則在接口中搜索方法
  • 如果帶注解的元素是方法,則在超類中搜索方法

如下倆方法其實(shí)也很相像,有何區(qū)別呢?

findAllMergedAnnotations

Find 對(duì)應(yīng) SearchStrategy.TYPE_HIERARCHY

image

findMergedAnnotation方法可一次性找出父類和接口、父類方法和接口方法上的注解

image

getAllMergedAnnotations

Get對(duì)應(yīng) SearchStrategy.INHERITED_ANNOTATIONS

image

想想 Spring 的@Service、@Controller 等注解支持繼承嗎?

我們通常的controller類,都會(huì)使用controller注解,如果可以被繼承的話,Spring就不會(huì)只讓我們使用Controller注解了,會(huì)提供另一種方式注入Controller組件,就是繼承BaseController類。
Spring 官方對(duì)此也有回應(yīng):繼承的問題在于那些注解真的應(yīng)該應(yīng)用于特定的具體類。

作者:JavaEdge.
原文鏈接:https://blog.csdn.net/qq_33589510/article/details/118443203

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • BAT 常問的 Java基礎(chǔ)39道常見面試題 1.八種基本數(shù)據(jù)類型的大小,以及他們的封裝類 2.引用數(shù)據(jù)類型 3....
    AI喬治閱讀 2,473評(píng)論 0 75
  • 又來更新啦,Android面試題《思考與解答》11月刊奉上。 說說View/ViewGroup的繪制流程 View...
    積木zz閱讀 1,221評(píng)論 0 18
  • JavaOOP Java的數(shù)據(jù)結(jié)構(gòu)有哪些? 線性表(ArrayList) 鏈表(LinkedList) 棧(Sta...
    h2coder閱讀 851評(píng)論 0 14
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,588評(píng)論 28 53
  • 信任包括信任自己和信任他人 很多時(shí)候,很多事情,失敗、遺憾、錯(cuò)過,源于不自信,不信任他人 覺得自己做不成,別人做不...
    吳氵晃閱讀 6,222評(píng)論 4 8