Spring 手動註冊Bean

方案一

實現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();
}

方案二

用到了再補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章