GenericBeanDefinition : 通用的bean實現,自2.5以后新加入的bean文件配置屬性定義類,是ChildBeanDefinition和RootBeanDefinition更好的替代者。
AnnotatedGenericBeanDefinition:存儲@Configuration注解注釋的類
ScannedGenericBeanDefinition:存儲@Component、@Service、@Controller等注解注釋的類
spring初始化時,會用GenericBeanDefinition或是ConfigurationClassBeanDefinition(用@Bean注解注釋的類)存儲用戶自定義的Bean,在初始化Bean時,又會將其轉換為RootBeanDefinition。
GenericBeanDefinition的patentName屬性指定了當前類的父類,最重要的是它實現了parentName屬性的setter、getter函數,RootBeanDefinition沒有parentName屬性,對應的getter函數只是返回null,setter函數不提供賦值操作
也就是說RootBeanDefinition不提供繼承相關的操作,但是初始化時使用的是RootBeanDefinition,那父類的性質如何體現?
這里要注意一點,子類會覆蓋父類中相同的屬性,所以Spring會首先初始化父類的RootBeanDefinition,然后根據子類的GenericBeanDefinition覆蓋父類中相應的屬性,最終獲得子類的RootBeanDefinition,這個比較巧妙,不需要使用兩個對象來體現父類與子類的關系,以后自己寫代碼時可以借鑒一下
轉載:https://blog.csdn.net/dhaiuda/article/details/83311495