方案一
实现BeanDefinitionRegistryPostProcessor
接口,在postProcessBeanDefinitionRegistry
方法中进行手动注册
/**
* 手动注册swagger docket bean
*/
@Override
public void postProcessBeanDefinitionRegistry(@NotNull BeanDefinitionRegistry registry) throws BeansException {
Map<String, String> basePackages = this.swaggerProperties.getBasePackages();
basePackages.forEach((key, value) ->{
// 创建Bean定义
RootBeanDefinition bean = new RootBeanDefinition(GroupedOpenApi.class,()->this.createApi(key,value));
// 注册Bean定义
registry.registerBeanDefinition(key+"Api", bean);
} );
}
如果要读取参数,需要获取环境变量进行读取,此时属性注入还未开始,没办法通过注入参数配置对象进行读取。实现EnvironmentAware
接口,
/**
* 获取环境变量并设置到swaggerProperties对象中
*/
@Override
public void setEnvironment(@NotNull Environment environment) {
// 从环境变量中根据指定前缀获取对应的参数配置类
BindResult<SwaggerProperties> bind = Binder.get(environment).bind(swaggerPropertiesPrefix, SwaggerProperties.class);
this.swaggerProperties = bind.get();
}
方案二
用到了再补充