Skip to content

Commit

Permalink
Replace Optional with Spring's ObjectProvider to manage the optionali…
Browse files Browse the repository at this point in the history
…ty of injection points more clearly.
  • Loading branch information
kratosmy committed Apr 6, 2024
1 parent 4ca7e89 commit 76afa92
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.linecorp.armeria.spring;

import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.linecorp.armeria.internal.spring.ArmeriaConfigurationUtil.configureServerWithArmeriaSettings;

import java.net.InetAddress;
Expand All @@ -25,13 +26,13 @@
import java.util.function.Consumer;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.SmartLifecycle;
import org.springframework.context.annotation.Bean;

import com.google.common.collect.ImmutableList;

import com.linecorp.armeria.common.DependencyInjector;
import com.linecorp.armeria.common.Flags;
Expand Down Expand Up @@ -69,16 +70,16 @@ public Server armeriaServer(
ArmeriaSettings armeriaSettings,
InternalServices internalService,
Optional<MeterRegistry> meterRegistry,
Optional<List<MetricCollectingServiceConfigurator>> metricCollectingServiceConfigurators,
ObjectProvider<MetricCollectingServiceConfigurator> metricCollectingServiceConfigurators,
Optional<MeterIdPrefixFunction> meterIdPrefixFunction,
Optional<List<ArmeriaServerConfigurator>> armeriaServerConfigurators,
Optional<List<Consumer<ServerBuilder>>> armeriaServerBuilderConsumers,
Optional<List<DependencyInjector>> dependencyInjectors,
Optional<List<ServerErrorHandler>> serverErrorHandlers,
ObjectProvider<ArmeriaServerConfigurator> armeriaServerConfigurators,
ObjectProvider<Consumer<ServerBuilder>> armeriaServerBuilderConsumers,
ObjectProvider<DependencyInjector> dependencyInjectors,
ObjectProvider<ServerErrorHandler> serverErrorHandlers,
BeanFactory beanFactory) {

if (!armeriaServerConfigurators.isPresent() &&
!armeriaServerBuilderConsumers.isPresent()) {
if (armeriaServerConfigurators.stream().findAny().isEmpty() &&
armeriaServerBuilderConsumers.stream().findAny().isEmpty()) {
throw new IllegalStateException(
"No services to register, " +
"use ArmeriaServerConfigurator or Consumer<ServerBuilder> to configure an Armeria server.");
Expand All @@ -93,14 +94,17 @@ public Server armeriaServer(
}

configureServerWithArmeriaSettings(serverBuilder, armeriaSettings, internalService,
armeriaServerConfigurators.orElse(ImmutableList.of()),
armeriaServerBuilderConsumers.orElse(ImmutableList.of()),
armeriaServerConfigurators
.orderedStream().collect(toImmutableList()),
armeriaServerBuilderConsumers
.orderedStream().collect(toImmutableList()),
meterRegistry.orElse(Flags.meterRegistry()),
meterIdPrefixFunction.orElse(
MeterIdPrefixFunction.ofDefault("armeria.server")),
metricCollectingServiceConfigurators.orElse(ImmutableList.of()),
dependencyInjectors.orElse(ImmutableList.of()),
serverErrorHandlers.orElse(ImmutableList.of()),
metricCollectingServiceConfigurators
.orderedStream().collect(toImmutableList()),
dependencyInjectors.orderedStream().collect(toImmutableList()),
serverErrorHandlers.orderedStream().collect(toImmutableList()),
beanFactory);

return serverBuilder.build();
Expand Down Expand Up @@ -131,16 +135,16 @@ public SmartLifecycle armeriaServerGracefulShutdownLifecycle(Server server) {
public InternalServices internalServices(
ArmeriaSettings settings,
Optional<MeterRegistry> meterRegistry,
Optional<List<HealthChecker>> healthCheckers,
Optional<List<HealthCheckServiceConfigurator>> healthCheckServiceConfigurators,
Optional<List<DocServiceConfigurator>> docServiceConfigurators,
ObjectProvider<HealthChecker> healthCheckers,
ObjectProvider<HealthCheckServiceConfigurator> healthCheckServiceConfigurators,
ObjectProvider<DocServiceConfigurator> docServiceConfigurators,
@Value("${management.server.port:#{null}}") @Nullable Integer managementServerPort,
@Value("${management.server.address:#{null}}") @Nullable InetAddress managementServerAddress,
@Value("${management.server.ssl.enabled:#{false}}") boolean enableManagementServerSsl) {
return InternalServices.of(settings, meterRegistry.orElse(Flags.meterRegistry()),
healthCheckers.orElse(ImmutableList.of()),
healthCheckServiceConfigurators.orElse(ImmutableList.of()),
docServiceConfigurators.orElse(ImmutableList.of()),
healthCheckers.orderedStream().collect(toImmutableList()),
healthCheckServiceConfigurators.orderedStream().collect(toImmutableList()),
docServiceConfigurators.orderedStream().collect(toImmutableList()),
managementServerPort, managementServerAddress, enableManagementServerSsl);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@
*/
package com.linecorp.armeria.spring.web.reactive;

import static com.google.common.collect.ImmutableList.toImmutableList;

import java.net.InetAddress;
import java.util.List;
import java.util.Optional;

import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
Expand Down Expand Up @@ -87,16 +89,16 @@ public ArmeriaReactiveWebServerFactory armeriaReactiveWebServerFactory(
public InternalServices internalServices(
ArmeriaSettings settings,
Optional<MeterRegistry> meterRegistry,
Optional<List<HealthChecker>> healthCheckers,
Optional<List<HealthCheckServiceConfigurator>> healthCheckServiceConfigurators,
Optional<List<DocServiceConfigurator>> docServiceConfigurators,
ObjectProvider<HealthChecker> healthCheckers,
ObjectProvider<HealthCheckServiceConfigurator> healthCheckServiceConfigurators,
ObjectProvider<DocServiceConfigurator> docServiceConfigurators,
@Value("${management.server.port:#{null}}") @Nullable Integer managementServerPort,
@Value("${management.server.address:#{null}}") @Nullable InetAddress managementServerAddress,
@Value("${management.server.ssl.enabled:#{false}}") boolean enableManagementServerSsl) {
return InternalServices.of(settings, meterRegistry.orElse(Flags.meterRegistry()),
healthCheckers.orElse(ImmutableList.of()),
healthCheckServiceConfigurators.orElse(ImmutableList.of()),
docServiceConfigurators.orElse(ImmutableList.of()),
healthCheckers.orderedStream().collect(toImmutableList()),
healthCheckServiceConfigurators.orderedStream().collect(toImmutableList()),
docServiceConfigurators.orderedStream().collect(toImmutableList()),
managementServerPort, managementServerAddress, enableManagementServerSsl);
}
}

0 comments on commit 76afa92

Please sign in to comment.