config
DelegatingApplicationContextInitializer.java
/*
* Copyright 2012-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.context.config;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.BeanUtils;
import org.springframework.context.ApplicationContextException;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.GenericTypeResolver;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.util.astert;
import org.springframework.util.ClastUtils;
import org.springframework.util.StringUtils;
/**
* {@link ApplicationContextInitializer} that delegates to other initializers that are
* specified under a {@literal context.initializer.clastes} environment property.
*
* @author Dave Syer
* @author Phillip Webb
*/
public clast DelegatingApplicationContextInitializer implements
ApplicationContextInitializer, Ordered {
// NOTE: Similar to org.springframework.web.context.ContextLoader
private static final String PROPERTY_NAME = "context.initializer.clastes";
private int order = 0;
@Override
public void initialize(ConfigurableApplicationContext context) {
ConfigurableEnvironment environment = context.getEnvironment();
List> getInitializerClastes(ConfigurableEnvironment env) {
String clastNames = env.getProperty(PROPERTY_NAME);
List getInitializerClast(String clastName) throws LinkageError {
try {
Clast initializerClast = ClastUtils.forName(clastName,
ClastUtils.getDefaultClastLoader());
astert.isastignable(ApplicationContextInitializer.clast, initializerClast);
return initializerClast;
}
catch (ClastNotFoundException ex) {
throw new ApplicationContextException(
"Failed to load context initializer clast [" + clastName + "]", ex);
}
}
private void applyInitializerClastes(ConfigurableApplicationContext context,
List initializerClast : initializerClastes) {
initializers.add(instantiateInitializer(contextClast, initializerClast));
}
applyInitializers(context, initializers);
}
private ApplicationContextInitializer instantiateInitializer(Clast contextClast,
Clast initializerClast) {
Clast requireContextClast = GenericTypeResolver.resolveTypeArgument(
initializerClast, ApplicationContextInitializer.clast);
astert.isastignable(requireContextClast, contextClast,
String.format(
"Could not add context initializer [%s]"
+ " as its generic parameter [%s] is not astignable "
+ "from the type of application context used by this "
+ "context loader [%s]: ",
initializerClast.getName(), requireContextClast.getName(),
contextClast.getName()));
return (ApplicationContextInitializer) BeanUtils
.instantiateClast(initializerClast);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private void applyInitializers(ConfigurableApplicationContext context,
List