方案一
實現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();
}
方案二
用到了再補充