SpringBoot 常用注解的原理和使用( 三 )

@EnableConfigurationProperties(JDBCProperties.class)ConfigData 注册为Bean,并提供给ConfigurationTest使用。可将ConfigData作为参数注入到构造函数和普通函数中 。

  • 可以用以下方式引用被@ConfigurationProperties(value = "https://www.huyubaike.com/biancheng/spring.datasource.druid")修饰的ConfigData
    • 可以直接把 ConfigData 当成Bean使用/*** 可直接被注入*/@Autowiredprivate ConfigData configData;
    • 可以用构造函数传入进来@Data@Configuration@EnableConfigurationProperties(value = https://www.huyubaike.com/biancheng/ConfigData.class )public class ConfigurationTest {private ConfigData configData2;/*** 作为构造函数的参数注入* @param data*/ConfigurationTest(ConfigData data){this.configData2 = data;}
    • 也可以作为@Bean的方法函数的参数 。只有当前类(ConfigurationTest)才可/*** 直接作为函数的参数* @param data* @return*/@Bean(name = "configData2")HashMap<String, String> getBean(ConfigData data){return new HashMap<>(0);}
    • 可以省略ConfigData直接将字段注入到返回结果中 。@Bean@ConfigurationProperties(value = "https://www.huyubaike.com/biancheng/spring.datasource.druid")HashMap<String, String> getBean2(ConfigData data){// 会自动为hashMap赋值,或使用set方法为对象赋值return new HashMap<>();}
    EnableConfigurationProperties注解的内部如下,它导入了一个实现了 ImportBeanDefinitionRegistrar 接口的类 。
    @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(EnableConfigurationPropertiesRegistrar.class)class EnableConfigurationPropertiesRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {registerInfrastructureBeans(registry);ConfigurationPropertiesBeanRegistrar beanRegistrar = new ConfigurationPropertiesBeanRegistrar(registry);// 获得@EnableConfigurationProperties的value指向的对象,并注册 。getTypes(metadata).forEach(beanRegistrar::register); }【SpringBoot 常用注解的原理和使用】

    经验总结扩展阅读