類Single和Multiple使用了@EnableConfigurationBeanBindings痰腮,這篇文章解析該注解绞蹦。
@Import(ConfigurationBeanBindingsRegister.class)
public @interface EnableConfigurationBeanBindings {
EnableConfigurationBeanBinding[] value();
}
@EnableConfigurationBeanBindings引入了類ConfigurationBeanBindingsRegister劣坊,EnableConfigurationBeanBinding也是注解伞租。
EnableConfigurationBeanBinding需要配置prefix、type屬性背伴。prefix表示配置文件中配置名字的前綴病附,type表示該前綴對應(yīng)的對象问窃,multiple 表示是否可以創(chuàng)建多個(gè)XxxConfig對象。EnableConfigurationBeanBinding引入了類ConfigurationBeanBindingRegistrar完沪。
@EnableConfigurationBeanBinding(prefix = "dubbo.application", type = ApplicationConfig.class)
@EnableConfigurationBeanBinding(prefix = "dubbo.applications", type = ApplicationConfig.class, multiple = true)
ConfigurationBeanBindingsRegister
ConfigurationBeanBindingsRegister首先創(chuàng)建ConfigurationBeanBindingRegistrar對象域庇,然后獲得value的@EnableConfigurationBeanBindings配置值,使用ConfigurationBeanBindingRegistrar對象遍歷每個(gè)配置覆积。
遍歷流程如下:
spring容器之后就可以根據(jù)BeanDefinition對象創(chuàng)建出XxxConfig對象听皿。
ConfigurationBeanBindingRegistrar
ConfigurationBeanBindingRegistrar處理@EnableConfigurationBeanBinding。其流程和上面的圖一致宽档。
@EnableConfigurationBeanBinding
該注解除了上面提到的prefix尉姨、type、multiple 屬性之外吗冤,還有兩個(gè)屬性:ignoreUnknownFields和ignoreInvalidFields又厉。
- ignoreUnknownFields:表示是否忽略未知字段。默認(rèn)為true椎瘟。如果設(shè)置為false覆致,意味著所有的配置必須在目標(biāo)對象中有對應(yīng)的字段。
- ignoreInvalidFields:表示是否忽略無效字段肺蔚,即是否忽略在目標(biāo)對象中不可訪問的相應(yīng)字段的參數(shù)煌妈。默認(rèn)為true。例如嵌套路徑中某個(gè)字段是null宣羊,導(dǎo)致參數(shù)不能設(shè)置璧诵。