首页 > 解决方案 > 如何使用实现 ImportBeanDefinitionRegistrar 在类中注入属性?

问题描述

我想使用这些属性将一些大张旗鼓的案卷设置为 spring,但是当我实现 ImportBeanDefinitionRegistrar 并出现错误时我无法获取这些属性

引起:java.lang.NoSuchMethodException: com.github.sofior.swagger.SwaggerAutoConfiguration.<init>()

@Configuration
@EnableSwagger2
@EnableConfigurationProperties(SwaggerProperties.class)
public class SwaggerAutoConfiguration implements ImportBeanDefinitionRegistrar {

    private final SwaggerProperties properties;

    public SwaggerAutoConfiguration(SwaggerProperties properties) {
        this.properties = properties;
    }

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

        System.out.println(properties);
        properties.getDockets().forEach((docketName, docketProperties) -> {
            BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(Docket.class);
            builder.addConstructorArgValue(docketProperties.getType());
            builder.addConstructorArgValue(docketProperties.getType());
            registry.registerBeanDefinition(docketName, builder.getRawBeanDefinition());
        });
    }

}

标签: springspring-bootspring-boot-starter

解决方案


我认为这是不可能的,因为春天有两个阶段

1.bean注册

2.bean初始化和实例化

SwaggerProperties 只能在阶段 2 完成实例化后使用,但registerBeanDefinitions是阶段 1


推荐阅读