Polish ContextLoader support
This commit is contained in:
parent
e3f4d810f6
commit
855a3e5221
|
|
@ -146,8 +146,8 @@ public interface SmartContextLoader extends ContextLoader {
|
||||||
* {@linkplain org.springframework.context.ConfigurableApplicationContext#refresh()
|
* {@linkplain org.springframework.context.ConfigurableApplicationContext#refresh()
|
||||||
* refresh} the {@code ApplicationContext} or
|
* refresh} the {@code ApplicationContext} or
|
||||||
* {@linkplain org.springframework.context.ConfigurableApplicationContext#registerShutdownHook()
|
* {@linkplain org.springframework.context.ConfigurableApplicationContext#registerShutdownHook()
|
||||||
* register a JVM shutdown hook} for it. Otherwise, this method should behave
|
* register a JVM shutdown hook} for it. Otherwise, this method should implement
|
||||||
* identical to {@link #loadContext(MergedContextConfiguration)}.
|
* behavior identical to {@link #loadContext(MergedContextConfiguration)}.
|
||||||
* <p>The default implementation throws an {@link UnsupportedOperationException}.
|
* <p>The default implementation throws an {@link UnsupportedOperationException}.
|
||||||
* Concrete implementations must therefore override this method in order to
|
* Concrete implementations must therefore override this method in order to
|
||||||
* support AOT (ahead of time) processing.
|
* support AOT (ahead of time) processing.
|
||||||
|
|
|
||||||
|
|
@ -195,7 +195,6 @@ public abstract class AbstractDelegatingSmartContextLoader implements SmartConte
|
||||||
* @throws IllegalArgumentException if the supplied merged configuration is {@code null}
|
* @throws IllegalArgumentException if the supplied merged configuration is {@code null}
|
||||||
* @throws IllegalStateException if neither candidate loader is capable of loading an
|
* @throws IllegalStateException if neither candidate loader is capable of loading an
|
||||||
* {@code ApplicationContext} from the supplied merged context configuration
|
* {@code ApplicationContext} from the supplied merged context configuration
|
||||||
* @since 6.0
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public final ApplicationContext loadContext(MergedContextConfiguration mergedConfig) throws Exception {
|
public final ApplicationContext loadContext(MergedContextConfiguration mergedConfig) throws Exception {
|
||||||
|
|
@ -204,7 +203,7 @@ public abstract class AbstractDelegatingSmartContextLoader implements SmartConte
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delegates to an appropriate candidate {@code SmartContextLoader} to load
|
* Delegates to an appropriate candidate {@code SmartContextLoader} to load
|
||||||
* an {@link ApplicationContext}.
|
* an {@link ApplicationContext} for AOT processing.
|
||||||
* <p>Delegation is based on explicit knowledge of the implementations of the
|
* <p>Delegation is based on explicit knowledge of the implementations of the
|
||||||
* default loaders for {@linkplain #getXmlLoader() XML configuration files and
|
* default loaders for {@linkplain #getXmlLoader() XML configuration files and
|
||||||
* Groovy scripts} and {@linkplain #getAnnotationConfigLoader() annotated classes}.
|
* Groovy scripts} and {@linkplain #getAnnotationConfigLoader() annotated classes}.
|
||||||
|
|
|
||||||
|
|
@ -113,8 +113,8 @@ public abstract class AbstractGenericContextLoader extends AbstractContextLoader
|
||||||
* {@linkplain org.springframework.context.ConfigurableApplicationContext#refresh()
|
* {@linkplain org.springframework.context.ConfigurableApplicationContext#refresh()
|
||||||
* refresh} the {@code ApplicationContext} or
|
* refresh} the {@code ApplicationContext} or
|
||||||
* {@linkplain org.springframework.context.ConfigurableApplicationContext#registerShutdownHook()
|
* {@linkplain org.springframework.context.ConfigurableApplicationContext#registerShutdownHook()
|
||||||
* register a JVM shutdown hook} for it. Otherwise, this method behaves
|
* register a JVM shutdown hook} for it. Otherwise, this method implements
|
||||||
* identical to {@link #loadContext(MergedContextConfiguration)}.
|
* behavior identical to {@link #loadContext(MergedContextConfiguration)}.
|
||||||
* @param mergedConfig the merged context configuration to use to load the
|
* @param mergedConfig the merged context configuration to use to load the
|
||||||
* application context
|
* application context
|
||||||
* @return a new application context
|
* @return a new application context
|
||||||
|
|
@ -136,7 +136,6 @@ public abstract class AbstractGenericContextLoader extends AbstractContextLoader
|
||||||
* @param refresh whether to refresh the {@code ApplicationContext} and register
|
* @param refresh whether to refresh the {@code ApplicationContext} and register
|
||||||
* a JVM shutdown hook for it
|
* a JVM shutdown hook for it
|
||||||
* @return a new application context
|
* @return a new application context
|
||||||
* @since 6.0
|
|
||||||
*/
|
*/
|
||||||
private final GenericApplicationContext loadContext(
|
private final GenericApplicationContext loadContext(
|
||||||
MergedContextConfiguration mergedConfig, boolean refresh) throws Exception {
|
MergedContextConfiguration mergedConfig, boolean refresh) throws Exception {
|
||||||
|
|
|
||||||
|
|
@ -113,8 +113,8 @@ public abstract class AbstractGenericWebContextLoader extends AbstractContextLoa
|
||||||
* {@linkplain org.springframework.context.ConfigurableApplicationContext#refresh()
|
* {@linkplain org.springframework.context.ConfigurableApplicationContext#refresh()
|
||||||
* refresh} the {@code ApplicationContext} or
|
* refresh} the {@code ApplicationContext} or
|
||||||
* {@linkplain org.springframework.context.ConfigurableApplicationContext#registerShutdownHook()
|
* {@linkplain org.springframework.context.ConfigurableApplicationContext#registerShutdownHook()
|
||||||
* register a JVM shutdown hook} for it. Otherwise, this method behaves
|
* register a JVM shutdown hook} for it. Otherwise, this method implements
|
||||||
* identical to {@link #loadContext(MergedContextConfiguration)}.
|
* behavior identical to {@link #loadContext(MergedContextConfiguration)}.
|
||||||
* @param mergedConfig the merged context configuration to use to load the
|
* @param mergedConfig the merged context configuration to use to load the
|
||||||
* application context
|
* application context
|
||||||
* @return a new web application context
|
* @return a new web application context
|
||||||
|
|
@ -137,18 +137,18 @@ public abstract class AbstractGenericWebContextLoader extends AbstractContextLoa
|
||||||
* @param refresh whether to refresh the {@code ApplicationContext} and register
|
* @param refresh whether to refresh the {@code ApplicationContext} and register
|
||||||
* a JVM shutdown hook for it
|
* a JVM shutdown hook for it
|
||||||
* @return a new web application context
|
* @return a new web application context
|
||||||
* @since 6.0
|
|
||||||
* @see org.springframework.test.context.SmartContextLoader#loadContext(MergedContextConfiguration)
|
* @see org.springframework.test.context.SmartContextLoader#loadContext(MergedContextConfiguration)
|
||||||
* @see org.springframework.test.context.SmartContextLoader#loadContextForAotProcessing(MergedContextConfiguration)
|
* @see org.springframework.test.context.SmartContextLoader#loadContextForAotProcessing(MergedContextConfiguration)
|
||||||
*/
|
*/
|
||||||
private final GenericWebApplicationContext loadContext(
|
private final GenericWebApplicationContext loadContext(
|
||||||
MergedContextConfiguration mergedConfig, boolean refresh) throws Exception {
|
MergedContextConfiguration mergedConfig, boolean refresh) throws Exception {
|
||||||
|
|
||||||
Assert.isTrue(mergedConfig instanceof WebMergedContextConfiguration,
|
if (!(mergedConfig instanceof WebMergedContextConfiguration webMergedConfig)) {
|
||||||
() -> String.format("Cannot load WebApplicationContext from non-web merged context configuration %s. " +
|
throw new IllegalArgumentException("""
|
||||||
"Consider annotating your test class with @WebAppConfiguration.", mergedConfig));
|
Cannot load WebApplicationContext from non-web merged context configuration %s. \
|
||||||
|
Consider annotating your test class with @WebAppConfiguration."""
|
||||||
WebMergedContextConfiguration webMergedConfig = (WebMergedContextConfiguration) mergedConfig;
|
.formatted(mergedConfig));
|
||||||
|
}
|
||||||
|
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug(String.format("Loading WebApplicationContext for merged context configuration %s.",
|
logger.debug(String.format("Loading WebApplicationContext for merged context configuration %s.",
|
||||||
|
|
@ -240,8 +240,9 @@ public abstract class AbstractGenericWebContextLoader extends AbstractContextLoa
|
||||||
ServletContext servletContext = null;
|
ServletContext servletContext = null;
|
||||||
// Find the root WebApplicationContext
|
// Find the root WebApplicationContext
|
||||||
while (parent != null) {
|
while (parent != null) {
|
||||||
if (parent instanceof WebApplicationContext && !(parent.getParent() instanceof WebApplicationContext)) {
|
if (parent instanceof WebApplicationContext parentWac &&
|
||||||
servletContext = ((WebApplicationContext) parent).getServletContext();
|
!(parent.getParent() instanceof WebApplicationContext)) {
|
||||||
|
servletContext = parentWac.getServletContext();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
parent = parent.getParent();
|
parent = parent.getParent();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue