關于@Autowired字段繼承后能否被注入

Background

@Inherited是一種元注解(指的是修飾注解的注解)践付。注意:

@Inherited修飾的注解(例如@My)只有修飾在上,才會起到所謂的繼承作用纽哥,修飾字段盖呼、方法是不能起到繼承作用瓣颅。
Java注解學習-@Inherited

關于@Autowired

舉例說明。現在有父類FatherService唬涧,其有個字段TargetService@Autowired修飾疫赎;

@Service
public class FatherService {

    @Autowired
    public TargetService targetService;
}

子類SonService繼承父類:

@Service
public class SonService extends FatherService{
    
}

測試類:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
@Slf4j
public class SonServiceTest {

    @Autowired
    SonService sonService;

    @Test
    public void test() throws Exception {

        Assert.assertNotEquals(null, sonService.targetService);
    }
}

請問:測試類中的sonService.targetService是否為null
答案是不為null碎节。原因是Spring的AutowiredAnnotationBeanPostProcessor.AutowiredFieldElement.inject會對一個類的本身的字段其所有父類的字段進行遍歷捧搞,凡是含有@Autowired的字段都會被注入。我用反射方式來近乎實現這個結果:

SonService sonService = new SonService();
// 被注入的bean
TargetService ts = new TargetService(); 
// 獲取對象的子類的父類的該字段
Field fatherField = sonService.getClass().getSuperclass().getDeclaredField("targetService");
// 注入
fatherField.set(sonService, ts);

為什么我在第一節(jié)提到了@Inherited?我原以為@Autowired是因為被@Inherited修飾過胎撇,所以子類才能繼承父類的被注入字段介粘。實際上@Inherited是這么用的:

@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface My {
}
@My // 用到類上才可以被子類SonService繼承
@Service
public class FatherService {

    @Autowired
    public TargetService targetService;
}

Extension

如果我把上面的子類改為:

@Service
public class SonService extends FatherService{
    public TargetService targetService;
}

實際上這時,sonService有了兩個字段:targetService父類的targetService晚树。只不過父類的targetService屬于隱形字段(在調用sonService.targetService調用的是targetService)姻采。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市爵憎,隨后出現的幾起案子慨亲,更是在濱河造成了極大的恐慌,老刑警劉巖宝鼓,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刑棵,死亡現場離奇詭異,居然都是意外死亡愚铡,警方通過查閱死者的電腦和手機蛉签,發(fā)現死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茂附,“玉大人正蛙,你說我怎么就攤上這事督弓∮” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵愚隧,是天一觀的道長蒂阱。 經常有香客問我,道長狂塘,這世上最難降的妖魔是什么录煤? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮荞胡,結果婚禮上妈踊,老公的妹妹穿的比我還像新娘。我一直安慰自己泪漂,他們只是感情好廊营,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萝勤,像睡著了一般露筒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敌卓,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天慎式,我揣著相機與錄音,去河邊找鬼。 笑死瘪吏,一個胖子當著我的面吹牛癣防,可吹牛的內容都是我干的。 我是一名探鬼主播肪虎,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼劣砍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扇救?” 一聲冷哼從身側響起刑枝,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迅腔,沒想到半個月后装畅,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡沧烈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年掠兄,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锌雀。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚂夕,死狀恐怖,靈堂內的尸體忽然破棺而出腋逆,到底是詐尸還是另有隱情婿牍,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布惩歉,位于F島的核電站等脂,受9級特大地震影響,放射性物質發(fā)生泄漏撑蚌。R本人自食惡果不足惜上遥,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望争涌。 院中可真熱鬧粉楚,春花似錦、人聲如沸亮垫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽包警。三九已至撵摆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間害晦,已是汗流浹背特铝。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工暑中, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鲫剿。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓鳄逾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親灵莲。 傳聞我的和親對象是個殘疾皇子雕凹,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內容

  • 注:都是在百度搜索整理的答案,如有侵權和錯誤政冻,希告知更改枚抵。 一、哪些情況下的對象會被垃圾回收機制處理掉 ?當對象對...
    Jenchar閱讀 3,224評論 3 2
  • 在經過一次沒有準備的面試后明场,發(fā)現自己雖然寫了兩年的android代碼汽摹,基礎知識卻忘的差不多了。這是程序員的大忌苦锨,沒...
    猿來如癡閱讀 2,839評論 3 10
  • #學童早餐日記# 烙餅?小米粥?韭菜炒雞蛋 周五啦逼泣,好興奮 早安[玫瑰][玫瑰]
    晨晨媽媽_8882閱讀 263評論 0 0
  • 5/17小雅 采薇 采薇采薇,薇亦作止舟舒。曰歸曰歸拉庶,歲亦莫止。 靡室靡家秃励,獫狁之故氏仗。不遑啟居,獫狁之故莺治。 采薇采薇廓鞠,...
    鐵卡閱讀 334評論 0 0
  • 女兒的閨蜜小敏結婚還沒有一年就離婚了帚稠, 那天谣旁,來到家里,沒有了往日的活潑喜慶滋早,拉了女兒進到屋里榄审,關了房門,神神秘秘...
    半畝方塘yx閱讀 492評論 8 9