Home / Class/ EnvironmentAotContribution Class — spring-boot Architecture

EnvironmentAotContribution Class — spring-boot Architecture

Architecture documentation for the EnvironmentAotContribution class in EnvironmentPostProcessorApplicationListener.java from the spring-boot codebase.

Entity Profile

Relationship Graph

Source Code

core/spring-boot/src/main/java/org/springframework/boot/support/EnvironmentPostProcessorApplicationListener.java lines 217–257

	private static final class EnvironmentAotContribution implements BeanFactoryInitializationAotContribution {

		private static final String ENVIRONMENT_VARIABLE = "environment";

		private final String[] activeProfiles;

		private EnvironmentAotContribution(String[] activeProfiles) {
			this.activeProfiles = activeProfiles;
		}

		@Override
		public void applyTo(GenerationContext generationContext,
				BeanFactoryInitializationCode beanFactoryInitializationCode) {
			GeneratedClass generatedClass = generationContext.getGeneratedClasses()
				.addForFeature(AOT_FEATURE_NAME, (type) -> {
					type.addModifiers(Modifier.PUBLIC);
					type.addJavadoc("Configure the environment with AOT optimizations.");
					type.addSuperinterface(EnvironmentPostProcessor.class);
				});
			generatedClass.getMethods().add("postProcessEnvironment", (method) -> {
				method.addModifiers(Modifier.PUBLIC);
				method.addAnnotation(Override.class);
				method.addParameter(ConfigurableEnvironment.class, ENVIRONMENT_VARIABLE);
				method.addParameter(SpringApplication.class, "application");
				method.addCode(generateActiveProfilesInitializeCode());
			});
			generationContext.getRuntimeHints()
				.reflection()
				.registerType(GeneratedTypeReference.of(generatedClass.getName()),
						MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);
		}

		private CodeBlock generateActiveProfilesInitializeCode() {
			CodeBlock.Builder code = CodeBlock.builder();
			for (String activeProfile : this.activeProfiles) {
				code.addStatement("$L.addActiveProfile($S)", ENVIRONMENT_VARIABLE, activeProfile);
			}
			return code.build();
		}

	}

Domain

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free