|
24 | 24 | import java.util.List; |
25 | 25 | import java.util.Map; |
26 | 26 | import java.util.Optional; |
27 | | -import java.util.stream.Collectors; |
28 | 27 |
|
29 | 28 | import com.fasterxml.jackson.databind.node.ObjectNode; |
30 | 29 | import io.swagger.v3.core.converter.ModelConverter; |
|
45 | 44 |
|
46 | 45 | import org.springframework.beans.factory.config.BeanFactoryPostProcessor; |
47 | 46 | import org.springframework.beans.factory.config.ConfigurableBeanFactory; |
48 | | -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; |
49 | 47 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; |
50 | 48 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
51 | 49 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; |
52 | 50 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
53 | 51 | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; |
54 | | -import org.springframework.boot.context.properties.bind.BindResult; |
55 | | -import org.springframework.boot.context.properties.bind.Binder; |
56 | 52 | import org.springframework.context.ApplicationContext; |
57 | 53 | import org.springframework.context.annotation.Bean; |
58 | 54 | import org.springframework.context.annotation.Conditional; |
59 | 55 | import org.springframework.context.annotation.Configuration; |
60 | 56 | import org.springframework.context.annotation.Lazy; |
61 | 57 | import org.springframework.core.LocalVariableTableParameterNameDiscoverer; |
62 | | -import org.springframework.core.env.Environment; |
63 | | -import org.springframework.util.CollectionUtils; |
64 | 58 |
|
65 | 59 | import static org.springdoc.core.Constants.SPRINGDOC_ENABLED; |
66 | | -import static org.springdoc.core.Constants.SPRINGDOC_PREFIX; |
67 | 60 | import static org.springdoc.core.Constants.SPRINGDOC_SCHEMA_RESOLVE_PROPERTIES; |
68 | 61 | import static org.springdoc.core.SpringDocUtils.getConfig; |
69 | | -import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; |
70 | 62 |
|
71 | 63 | @Configuration |
72 | 64 | @ConditionalOnProperty(name = SPRINGDOC_ENABLED, matchIfMissing = true) |
@@ -192,41 +184,17 @@ OpenApiCustomiser propertiesResolverForSchema(PropertyResolverUtils propertyReso |
192 | 184 | @Conditional(CacheOrGroupedOpenApiCondition.class) |
193 | 185 | @ConditionalOnClass(name = BINDRESULT_CLASS) |
194 | 186 | @Lazy(false) |
195 | | - BeanFactoryPostProcessor springdocBeanFactoryPostProcessor(Environment environment) { |
196 | | - return beanFactory -> { |
197 | | - final BindResult<SpringDocConfigProperties> result = Binder.get(environment) |
198 | | - .bind(SPRINGDOC_PREFIX, SpringDocConfigProperties.class); |
199 | | - if (result.isBound()) { |
200 | | - SpringDocConfigProperties springDocGroupConfig = result.get(); |
201 | | - List<GroupedOpenApi> groupedOpenApis = springDocGroupConfig.getGroupConfigs().stream() |
202 | | - .map(elt -> { |
203 | | - GroupedOpenApi.Builder builder = GroupedOpenApi.builder(); |
204 | | - if (!CollectionUtils.isEmpty(elt.getPackagesToScan())) |
205 | | - builder.packagesToScan(elt.getPackagesToScan().toArray(new String[0])); |
206 | | - if (!CollectionUtils.isEmpty(elt.getPathsToMatch())) |
207 | | - builder.pathsToMatch(elt.getPathsToMatch().toArray(new String[0])); |
208 | | - return builder.setGroup(elt.getGroup()).build(); |
209 | | - }) |
210 | | - .collect(Collectors.toList()); |
211 | | - groupedOpenApis.forEach(elt -> beanFactory.registerSingleton(elt.getGroup(), elt)); |
212 | | - } |
213 | | - initBeanFactoryPostProcessor(beanFactory); |
214 | | - }; |
| 187 | + static BeanFactoryPostProcessor springdocBeanFactoryPostProcessor() { |
| 188 | + return new SpringdocBeanFactoryConfigurer(); |
215 | 189 | } |
216 | 190 |
|
217 | 191 | // For spring-boot-1 compatibility |
218 | 192 | @Bean |
219 | 193 | @Conditional(CacheOrGroupedOpenApiCondition.class) |
220 | 194 | @ConditionalOnMissingClass(value = BINDRESULT_CLASS) |
221 | 195 | @Lazy(false) |
222 | | - BeanFactoryPostProcessor springdocBeanFactoryPostProcessor2(Environment environment) { |
223 | | - return this::initBeanFactoryPostProcessor; |
| 196 | + static BeanFactoryPostProcessor springdocBeanFactoryPostProcessor2() { |
| 197 | + return beanFactory -> SpringdocBeanFactoryConfigurer.initBeanFactoryPostProcessor(beanFactory); |
224 | 198 | } |
225 | 199 |
|
226 | | - private void initBeanFactoryPostProcessor(ConfigurableListableBeanFactory beanFactory) { |
227 | | - for (String beanName : beanFactory.getBeanNamesForType(OpenAPIBuilder.class)) |
228 | | - beanFactory.getBeanDefinition(beanName).setScope(SCOPE_PROTOTYPE); |
229 | | - for (String beanName : beanFactory.getBeanNamesForType(OpenAPI.class)) |
230 | | - beanFactory.getBeanDefinition(beanName).setScope(SCOPE_PROTOTYPE); |
231 | | - } |
232 | 200 | } |
0 commit comments