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

方案二

用到了再补充

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