Polishing
This commit is contained in:
parent
6cae0650e6
commit
eb3254d2a9
|
@ -79,19 +79,17 @@ import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spring's default implementation of the
|
* Spring's default implementation of the {@link ConfigurableListableBeanFactory}
|
||||||
* {@link org.springframework.beans.factory.ListableBeanFactory} and
|
* and {@link BeanDefinitionRegistry} interfaces: a full-fledged bean factory
|
||||||
* {@link BeanDefinitionRegistry} interfaces: a full-fledged bean factory
|
* based on bean definition metadata, extensible through post-processors.
|
||||||
* based on bean definition objects.
|
|
||||||
*
|
*
|
||||||
* <p>Typical usage is registering all bean definitions first (possibly read
|
* <p>Typical usage is registering all bean definitions first (possibly read
|
||||||
* from a bean definition file), before accessing beans. Bean definition lookup
|
* from a bean definition file), before accessing beans. Bean lookup by name
|
||||||
* is therefore an inexpensive operation in a local bean definition table,
|
* is therefore an inexpensive operation in a local bean definition table,
|
||||||
* operating on pre-built bean definition metadata objects.
|
* operating on pre-resolved bean definition metadata objects.
|
||||||
*
|
*
|
||||||
* <p>Can be used as a standalone bean factory, or as a superclass for custom
|
* <p>Note that readers for specific bean definition formats are typically
|
||||||
* bean factories. Note that readers for specific bean definition formats are
|
* implemented separately rather than as bean factory subclasses:
|
||||||
* typically implemented separately rather than as bean factory subclasses:
|
|
||||||
* see for example {@link PropertiesBeanDefinitionReader} and
|
* see for example {@link PropertiesBeanDefinitionReader} and
|
||||||
* {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader}.
|
* {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader}.
|
||||||
*
|
*
|
||||||
|
@ -108,9 +106,10 @@ import org.springframework.util.StringUtils;
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
* @since 16 April 2001
|
* @since 16 April 2001
|
||||||
* @see StaticListableBeanFactory
|
* @see #registerBeanDefinition
|
||||||
* @see PropertiesBeanDefinitionReader
|
* @see #addBeanPostProcessor
|
||||||
* @see org.springframework.beans.factory.xml.XmlBeanDefinitionReader
|
* @see #getBean
|
||||||
|
* @see #resolveDependency
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
|
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
|
||||||
|
@ -1249,7 +1248,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private FactoryAwareOrderSourceProvider createFactoryAwareOrderSourceProvider(Map<String, Object> beans) {
|
private OrderComparator.OrderSourceProvider createFactoryAwareOrderSourceProvider(Map<String, Object> beans) {
|
||||||
IdentityHashMap<Object, String> instancesToBeanNames = new IdentityHashMap<>();
|
IdentityHashMap<Object, String> instancesToBeanNames = new IdentityHashMap<>();
|
||||||
beans.forEach((beanName, instance) -> instancesToBeanNames.put(instance, beanName));
|
beans.forEach((beanName, instance) -> instancesToBeanNames.put(instance, beanName));
|
||||||
return new FactoryAwareOrderSourceProvider(instancesToBeanNames);
|
return new FactoryAwareOrderSourceProvider(instancesToBeanNames);
|
||||||
|
@ -1616,6 +1615,29 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A dependency descriptor marker for nested elements.
|
||||||
|
*/
|
||||||
|
private static class NestedDependencyDescriptor extends DependencyDescriptor {
|
||||||
|
|
||||||
|
public NestedDependencyDescriptor(DependencyDescriptor original) {
|
||||||
|
super(original);
|
||||||
|
increaseNestingLevel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A dependency descriptor marker for multiple elements.
|
||||||
|
*/
|
||||||
|
private static class MultiElementDescriptor extends NestedDependencyDescriptor {
|
||||||
|
|
||||||
|
public MultiElementDescriptor(DependencyDescriptor original) {
|
||||||
|
super(original);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializable ObjectFactory/ObjectProvider for lazy resolution of a dependency.
|
* Serializable ObjectFactory/ObjectProvider for lazy resolution of a dependency.
|
||||||
*/
|
*/
|
||||||
|
@ -1720,7 +1742,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializable ObjectFactory for lazy resolution of a dependency.
|
* A {@code javax.inject.Provider} implementation for lazy resolution of a dependency.
|
||||||
*/
|
*/
|
||||||
private class Jsr330DependencyProvider extends DependencyObjectProvider implements Provider<Object> {
|
private class Jsr330DependencyProvider extends DependencyObjectProvider implements Provider<Object> {
|
||||||
|
|
||||||
|
@ -1793,21 +1815,4 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class NestedDependencyDescriptor extends DependencyDescriptor {
|
|
||||||
|
|
||||||
public NestedDependencyDescriptor(DependencyDescriptor original) {
|
|
||||||
super(original);
|
|
||||||
increaseNestingLevel();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static class MultiElementDescriptor extends NestedDependencyDescriptor {
|
|
||||||
|
|
||||||
public MultiElementDescriptor(DependencyDescriptor original) {
|
|
||||||
super(original);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,8 @@ public abstract class RouterFunctions {
|
||||||
public static final String URI_TEMPLATE_VARIABLES_ATTRIBUTE =
|
public static final String URI_TEMPLATE_VARIABLES_ATTRIBUTE =
|
||||||
RouterFunctions.class.getName() + ".uriTemplateVariables";
|
RouterFunctions.class.getName() + ".uriTemplateVariables";
|
||||||
|
|
||||||
private static final HandlerFunction<ServerResponse> NOT_FOUND_HANDLER = request -> ServerResponse.notFound().build();
|
private static final HandlerFunction<ServerResponse> NOT_FOUND_HANDLER =
|
||||||
|
request -> ServerResponse.notFound().build();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -103,7 +104,6 @@ public abstract class RouterFunctions {
|
||||||
* RouterFunction<ServerResponse> userRoutes =
|
* RouterFunction<ServerResponse> userRoutes =
|
||||||
* RouterFunctions.route(RequestPredicates.method(HttpMethod.GET), this::listUsers)
|
* RouterFunctions.route(RequestPredicates.method(HttpMethod.GET), this::listUsers)
|
||||||
* .andRoute(RequestPredicates.method(HttpMethod.POST), this::createUser);
|
* .andRoute(RequestPredicates.method(HttpMethod.POST), this::createUser);
|
||||||
*
|
|
||||||
* RouterFunction<ServerResponse> nestedRoute =
|
* RouterFunction<ServerResponse> nestedRoute =
|
||||||
* RouterFunctions.nest(RequestPredicates.path("/user"), userRoutes);
|
* RouterFunctions.nest(RequestPredicates.path("/user"), userRoutes);
|
||||||
* </pre>
|
* </pre>
|
||||||
|
@ -125,7 +125,7 @@ public abstract class RouterFunctions {
|
||||||
* For instance
|
* For instance
|
||||||
* <pre class="code">
|
* <pre class="code">
|
||||||
* Resource location = new FileSystemResource("public-resources/");
|
* Resource location = new FileSystemResource("public-resources/");
|
||||||
* RoutingFunction<ServerResponse> resources = RouterFunctions.resources("/resources/**", location);
|
* RouterFunction<ServerResponse> resources = RouterFunctions.resources("/resources/**", location);
|
||||||
* </pre>
|
* </pre>
|
||||||
* @param pattern the pattern to match
|
* @param pattern the pattern to match
|
||||||
* @param location the location directory relative to which resources should be resolved
|
* @param location the location directory relative to which resources should be resolved
|
||||||
|
@ -225,12 +225,13 @@ public abstract class RouterFunctions {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static <T> Mono<T> wrapException(Supplier<Mono<T>> supplier) {
|
private static <T> Mono<T> wrapException(Supplier<Mono<T>> supplier) {
|
||||||
try {
|
try {
|
||||||
return supplier.get();
|
return supplier.get();
|
||||||
}
|
}
|
||||||
catch (Throwable t) {
|
catch (Throwable ex) {
|
||||||
return Mono.error(t);
|
return Mono.error(ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,6 +304,7 @@ public abstract class RouterFunctions {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static final class SameComposedRouterFunction<T extends ServerResponse> extends AbstractRouterFunction<T> {
|
static final class SameComposedRouterFunction<T extends ServerResponse> extends AbstractRouterFunction<T> {
|
||||||
|
|
||||||
private final RouterFunction<T> first;
|
private final RouterFunction<T> first;
|
||||||
|
@ -350,9 +352,9 @@ public abstract class RouterFunctions {
|
||||||
this.first.accept(visitor);
|
this.first.accept(visitor);
|
||||||
this.second.accept(visitor);
|
this.second.accept(visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static final class FilteredRouterFunction<T extends ServerResponse, S extends ServerResponse>
|
static final class FilteredRouterFunction<T extends ServerResponse, S extends ServerResponse>
|
||||||
implements RouterFunction<S> {
|
implements RouterFunction<S> {
|
||||||
|
|
||||||
|
@ -383,8 +385,8 @@ public abstract class RouterFunctions {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class DefaultRouterFunction<T extends ServerResponse>
|
|
||||||
extends AbstractRouterFunction<T> {
|
private static final class DefaultRouterFunction<T extends ServerResponse> extends AbstractRouterFunction<T> {
|
||||||
|
|
||||||
private final RequestPredicate predicate;
|
private final RequestPredicate predicate;
|
||||||
|
|
||||||
|
@ -414,11 +416,10 @@ public abstract class RouterFunctions {
|
||||||
public void accept(Visitor visitor) {
|
public void accept(Visitor visitor) {
|
||||||
visitor.route(this.predicate, this.handlerFunction);
|
visitor.route(this.predicate, this.handlerFunction);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class DefaultNestedRouterFunction<T extends ServerResponse>
|
|
||||||
extends AbstractRouterFunction<T> {
|
private static final class DefaultNestedRouterFunction<T extends ServerResponse> extends AbstractRouterFunction<T> {
|
||||||
|
|
||||||
private final RequestPredicate predicate;
|
private final RequestPredicate predicate;
|
||||||
|
|
||||||
|
@ -446,15 +447,15 @@ public abstract class RouterFunctions {
|
||||||
mergeTemplateVariables(serverRequest, nestedRequest.pathVariables());
|
mergeTemplateVariables(serverRequest, nestedRequest.pathVariables());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
)
|
).orElseGet(Mono::empty);
|
||||||
.orElseGet(Mono::empty);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private void mergeTemplateVariables(ServerRequest request, Map<String, String> variables) {
|
private void mergeTemplateVariables(ServerRequest request, Map<String, String> variables) {
|
||||||
if (!variables.isEmpty()) {
|
if (!variables.isEmpty()) {
|
||||||
Map<String, Object> attributes = request.attributes();
|
Map<String, Object> attributes = request.attributes();
|
||||||
Map<String, String> oldVariables = (Map<String, String>)request.attribute(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE)
|
Map<String, String> oldVariables =
|
||||||
|
(Map<String, String>) request.attribute(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE)
|
||||||
.orElseGet(LinkedHashMap::new);
|
.orElseGet(LinkedHashMap::new);
|
||||||
Map<String, String> mergedVariables = new LinkedHashMap<>(oldVariables);
|
Map<String, String> mergedVariables = new LinkedHashMap<>(oldVariables);
|
||||||
mergedVariables.putAll(variables);
|
mergedVariables.putAll(variables);
|
||||||
|
@ -469,9 +470,9 @@ public abstract class RouterFunctions {
|
||||||
this.routerFunction.accept(visitor);
|
this.routerFunction.accept(visitor);
|
||||||
visitor.endNested(this.predicate);
|
visitor.endNested(this.predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class ResourcesRouterFunction extends AbstractRouterFunction<ServerResponse> {
|
private static class ResourcesRouterFunction extends AbstractRouterFunction<ServerResponse> {
|
||||||
|
|
||||||
private final Function<ServerRequest, Mono<Resource>> lookupFunction;
|
private final Function<ServerRequest, Mono<Resource>> lookupFunction;
|
||||||
|
@ -492,6 +493,7 @@ public abstract class RouterFunctions {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class HandlerStrategiesResponseContext implements ServerResponse.Context {
|
private static class HandlerStrategiesResponseContext implements ServerResponse.Context {
|
||||||
|
|
||||||
private final HandlerStrategies strategies;
|
private final HandlerStrategies strategies;
|
||||||
|
|
Loading…
Reference in New Issue