Polish
This commit is contained in:
parent
676cacd308
commit
8ede73066d
|
|
@ -49,64 +49,71 @@ public class EnvironmentDelegateApplicationContextInitializer implements
|
||||||
private int order = 0;
|
private int order = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(ConfigurableApplicationContext applicationContext) {
|
public void initialize(ConfigurableApplicationContext context) {
|
||||||
ConfigurableEnvironment env = applicationContext.getEnvironment();
|
ConfigurableEnvironment environment = context.getEnvironment();
|
||||||
List<Class<ApplicationContextInitializer<ConfigurableApplicationContext>>> initializerClasses = determineContextInitializerClasses(env);
|
List<Class<?>> initializerClasses = getInitializerClasses(environment);
|
||||||
|
if (initializerClasses.size() > 0) {
|
||||||
if (initializerClasses.size() == 0) {
|
applyInitializerClasses(context, initializerClasses);
|
||||||
// no ApplicationContextInitializers have been declared -> nothing to do
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Class<?> contextClass = applicationContext.getClass();
|
|
||||||
ArrayList<ApplicationContextInitializer<ConfigurableApplicationContext>> initializerInstances = new ArrayList<ApplicationContextInitializer<ConfigurableApplicationContext>>();
|
|
||||||
|
|
||||||
for (Class<ApplicationContextInitializer<ConfigurableApplicationContext>> initializerClass : initializerClasses) {
|
|
||||||
Class<?> initializerContextClass = GenericTypeResolver.resolveTypeArgument(
|
|
||||||
initializerClass, ApplicationContextInitializer.class);
|
|
||||||
Assert.isAssignable(
|
|
||||||
initializerContextClass,
|
|
||||||
contextClass,
|
|
||||||
String.format(
|
|
||||||
"Could not add context initializer [%s] as its generic parameter [%s] "
|
|
||||||
+ "is not assignable from the type of application context used by this "
|
|
||||||
+ "context loader [%s]: ",
|
|
||||||
initializerClass.getName(),
|
|
||||||
initializerContextClass.getName(), contextClass.getName()));
|
|
||||||
initializerInstances.add(BeanUtils.instantiateClass(initializerClass));
|
|
||||||
}
|
|
||||||
|
|
||||||
Collections.sort(initializerInstances, new AnnotationAwareOrderComparator());
|
|
||||||
for (ApplicationContextInitializer<ConfigurableApplicationContext> initializer : initializerInstances) {
|
|
||||||
initializer.initialize(applicationContext);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
private List<Class<?>> getInitializerClasses(ConfigurableEnvironment env) {
|
||||||
private List<Class<ApplicationContextInitializer<ConfigurableApplicationContext>>> determineContextInitializerClasses(
|
|
||||||
ConfigurableEnvironment env) {
|
|
||||||
String classNames = env.getProperty(PROPERTY_NAME);
|
String classNames = env.getProperty(PROPERTY_NAME);
|
||||||
List<Class<ApplicationContextInitializer<ConfigurableApplicationContext>>> classes = new ArrayList<Class<ApplicationContextInitializer<ConfigurableApplicationContext>>>();
|
List<Class<?>> classes = new ArrayList<Class<?>>();
|
||||||
if (StringUtils.hasLength(classNames)) {
|
if (StringUtils.hasLength(classNames)) {
|
||||||
for (String className : StringUtils.tokenizeToStringArray(classNames, ",")) {
|
for (String className : StringUtils.tokenizeToStringArray(classNames, ",")) {
|
||||||
try {
|
classes.add(getInitializerClass(className));
|
||||||
Class<?> clazz = ClassUtils.forName(className,
|
|
||||||
ClassUtils.getDefaultClassLoader());
|
|
||||||
Assert.isAssignable(ApplicationContextInitializer.class, clazz,
|
|
||||||
"class [" + className
|
|
||||||
+ "] must implement ApplicationContextInitializer");
|
|
||||||
classes.add((Class<ApplicationContextInitializer<ConfigurableApplicationContext>>) clazz);
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException ex) {
|
|
||||||
throw new ApplicationContextException(
|
|
||||||
"Failed to load context initializer class [" + className
|
|
||||||
+ "]", ex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return classes;
|
return classes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Class<?> getInitializerClass(String className) throws LinkageError {
|
||||||
|
try {
|
||||||
|
Class<?> initializerClass = ClassUtils.forName(className,
|
||||||
|
ClassUtils.getDefaultClassLoader());
|
||||||
|
Assert.isAssignable(ApplicationContextInitializer.class, initializerClass);
|
||||||
|
return initializerClass;
|
||||||
|
}
|
||||||
|
catch (ClassNotFoundException ex) {
|
||||||
|
throw new ApplicationContextException(
|
||||||
|
"Failed to load context initializer class [" + className + "]", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void applyInitializerClasses(ConfigurableApplicationContext context,
|
||||||
|
List<Class<?>> initializerClasses) {
|
||||||
|
Class<?> contextClass = context.getClass();
|
||||||
|
List<ApplicationContextInitializer<?>> initializers = new ArrayList<ApplicationContextInitializer<?>>();
|
||||||
|
for (Class<?> initializerClass : initializerClasses) {
|
||||||
|
initializers.add(instantiateInitializer(contextClass, initializerClass));
|
||||||
|
}
|
||||||
|
applyInitializers(context, initializers);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ApplicationContextInitializer<?> instantiateInitializer(
|
||||||
|
Class<?> contextClass, Class<?> initializerClass) {
|
||||||
|
Class<?> requireContextClass = GenericTypeResolver.resolveTypeArgument(
|
||||||
|
initializerClass, ApplicationContextInitializer.class);
|
||||||
|
Assert.isAssignable(requireContextClass, contextClass, String.format(
|
||||||
|
"Could not add context initializer [%s]"
|
||||||
|
+ " as its generic parameter [%s] is not assignable "
|
||||||
|
+ "from the type of application context used by this "
|
||||||
|
+ "context loader [%s]: ", initializerClass.getName(),
|
||||||
|
requireContextClass.getName(), contextClass.getName()));
|
||||||
|
return (ApplicationContextInitializer<?>) BeanUtils
|
||||||
|
.instantiateClass(initializerClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||||
|
private void applyInitializers(ConfigurableApplicationContext context,
|
||||||
|
List<ApplicationContextInitializer<?>> initializers) {
|
||||||
|
Collections.sort(initializers, new AnnotationAwareOrderComparator());
|
||||||
|
for (ApplicationContextInitializer initializer : initializers) {
|
||||||
|
initializer.initialize(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setOrder(int order) {
|
public void setOrder(int order) {
|
||||||
this.order = order;
|
this.order = order;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue