ConfigurationProperties原理
2024-01-19 18:03 Spiderman25 阅读(44) 评论(0) 收藏 举报registerBeanDefinition:979, DefaultListableBeanFactory (org.springframework.beans.factory.support) register:131, ConfigurationPropertiesBindingPostProcessor (org.springframework.boot.context.properties) registerInfrastructureBeans:51, EnableConfigurationPropertiesRegistrar (org.springframework.boot.context.properties) registerBeanDefinitions:38, EnableConfigurationPropertiesRegistrar (org.springframework.boot.context.properties) registerBeanDefinitions:86, ImportBeanDefinitionRegistrar (org.springframework.context.annotation) lambda$loadBeanDefinitionsFromRegistrars$1:384, ConfigurationClassBeanDefinitionReader (org.springframework.context.annotation) accept:-1, 1788380050 (org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$$Lambda$342) forEach:684, LinkedHashMap (java.util) loadBeanDefinitionsFromRegistrars:383, ConfigurationClassBeanDefinitionReader (org.springframework.context.annotation) loadBeanDefinitionsForConfigurationClass:148, ConfigurationClassBeanDefinitionReader (org.springframework.context.annotation) loadBeanDefinitions:120, ConfigurationClassBeanDefinitionReader (org.springframework.context.annotation) processConfigBeanDefinitions:331, ConfigurationClassPostProcessor (org.springframework.context.annotation) postProcessBeanDefinitionRegistry:236, ConfigurationClassPostProcessor (org.springframework.context.annotation) invokeBeanDefinitionRegistryPostProcessors:280, PostProcessorRegistrationDelegate (org.springframework.context.support) invokeBeanFactoryPostProcessors:96, PostProcessorRegistrationDelegate (org.springframework.context.support) invokeBeanFactoryPostProcessors:707, AbstractApplicationContext (org.springframework.context.support) refresh:533, AbstractApplicationContext (org.springframework.context.support) refresh:141, ServletWebServerApplicationContext (org.springframework.boot.web.servlet.context) refresh:757, SpringApplication (org.springframework.boot) refreshContext:397, SpringApplication (org.springframework.boot) run:317, SpringApplication (org.springframework.boot) run:1265, SpringApplication (org.springframework.boot) run:1253, SpringApplication (org.springframework.boot) main:17, AppApplication (org.springframework.boot.mytest)
一句话,就是被ConfigurationPropertiesBindingPostProcessor处理后就能自动添加属性了
在调用beanfactory的回调方法时,在工厂bean ConfigurationClassPostProcessor这个类中会被回调,解析Import导入的类时,会调用EnableConfigurationPropertiesRegistrar这个类的registerBeanDefinitions方法,该方法会调用ConfigurationPropertiesBindingPostProcessor的静态方法register把ConfigurationPropertiesBindingPostProcessor定义注册到容器中。
而EnableConfigurationPropertiesRegistrar是在EnableConfigurationProperties类中被导入

至于在哪又添加了EnableConfigurationProperties,这个我还没有看到。
setVv:16, Mybean (org.springframework.boot.mytest.vv) invoke0:-1, NativeMethodAccessorImpl (jdk.internal.reflect) invoke:62, NativeMethodAccessorImpl (jdk.internal.reflect) invoke:43, DelegatingMethodAccessorImpl (jdk.internal.reflect) invoke:566, Method (java.lang.reflect) setValue:346, JavaBeanBinder$BeanProperty (org.springframework.boot.context.properties.bind) bind:96, JavaBeanBinder (org.springframework.boot.context.properties.bind) bind:79, JavaBeanBinder (org.springframework.boot.context.properties.bind) bind:56, JavaBeanBinder (org.springframework.boot.context.properties.bind) lambda$bindDataObject$5:452, Binder (org.springframework.boot.context.properties.bind) get:-1, 1046545660 (org.springframework.boot.context.properties.bind.Binder$$Lambda$191) withIncreasedDepth:572, Binder$Context (org.springframework.boot.context.properties.bind) withDataObject:558, Binder$Context (org.springframework.boot.context.properties.bind) access$400:513, Binder$Context (org.springframework.boot.context.properties.bind) bindDataObject:450, Binder (org.springframework.boot.context.properties.bind) bindObject:391, Binder (org.springframework.boot.context.properties.bind) bind:320, Binder (org.springframework.boot.context.properties.bind) bind:308, Binder (org.springframework.boot.context.properties.bind) bind:238, Binder (org.springframework.boot.context.properties.bind) bind:225, Binder (org.springframework.boot.context.properties.bind) bind:89, ConfigurationPropertiesBinder (org.springframework.boot.context.properties) bind:107, ConfigurationPropertiesBindingPostProcessor (org.springframework.boot.context.properties) postProcessBeforeInitialization:96, ConfigurationPropertiesBindingPostProcessor (org.springframework.boot.context.properties) applyBeanPostProcessorsBeforeInitialization:415, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support) initializeBean:1786, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support) doCreateBean:594, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support) createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support) lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support) getObject:-1, 938463537 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$267) getSingleton:226, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support) doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support) getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support) preInstantiateSingletons:897, DefaultListableBeanFactory (org.springframework.beans.factory.support) finishBeanFactoryInitialization:879, AbstractApplicationContext (org.springframework.context.support) refresh:551, AbstractApplicationContext (org.springframework.context.support) refresh:141, ServletWebServerApplicationContext (org.springframework.boot.web.servlet.context) refresh:757, SpringApplication (org.springframework.boot) refreshContext:397, SpringApplication (org.springframework.boot) run:317, SpringApplication (org.springframework.boot) run:1265, SpringApplication (org.springframework.boot) run:1253, SpringApplication (org.springframework.boot) main:17, AppApplication (org.springframework.boot.mytest)
doCreateBean方法



ConfigurationPropertiesBindingPostProcessor







ConfigurationPropertiesBindingPostProcessor这个类在处理bean对象时会判断是否被ConfigurationProperties标记,如果没有则不处理,最后使用Binder类来处理属性绑定。Binder可以认为是一个工具类,其原理利用反射,遍历每个属性,然后从propertySources中取值再设置到属性中。
浙公网安备 33010602011771号