diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionalOnNotWebApplication.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionalOnNotWebApplication.java index 00cd5cb5ac..7ad0399abe 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionalOnNotWebApplication.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionalOnNotWebApplication.java @@ -33,6 +33,6 @@ import org.springframework.context.annotation.Conditional; @Target({ ElementType.TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented -@Conditional(OnNotWebApplicationCondition.class) +@Conditional(OnWebApplicationCondition.class) public @interface ConditionalOnNotWebApplication { } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnNotWebApplicationCondition.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnNotWebApplicationCondition.java deleted file mode 100644 index 734c435e7b..0000000000 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnNotWebApplicationCondition.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2012-2013 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.autoconfigure.condition; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.context.annotation.Condition; -import org.springframework.context.annotation.ConditionContext; -import org.springframework.core.type.AnnotatedTypeMetadata; -import org.springframework.util.ClassUtils; -import org.springframework.util.StringUtils; - -/** - * {@link Condition} that checks for a web application context and returns false if one is - * found. - * - * @author Dave Syer - * @see ConditionalOnNotWebApplication - */ -class OnNotWebApplicationCondition implements Condition { - - private static Log logger = LogFactory.getLog(OnNotWebApplicationCondition.class); - - @Override - public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - - String checking = ConditionLogUtils.getPrefix(logger, metadata); - - if (!ClassUtils.isPresent( - "org.springframework.web.context.support.GenericWebApplicationContext", - null)) { - if (logger.isDebugEnabled()) { - logger.debug(checking + "Web application classes not found"); - } - return true; - } - boolean result = !StringUtils.arrayToCommaDelimitedString( - context.getBeanFactory().getRegisteredScopeNames()).contains("session"); - if (logger.isDebugEnabled()) { - logger.debug(checking + "Web application context found: " + !result); - } - - return result; - - } - -} diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnWebApplicationCondition.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnWebApplicationCondition.java index 3a07075f2f..c2177b05a9 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnWebApplicationCondition.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnWebApplicationCondition.java @@ -22,40 +22,63 @@ import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.util.ClassUtils; -import org.springframework.util.StringUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.StandardServletEnvironment; /** - * {@link Condition} that checks for a web application context. + * {@link Condition} that checks for a the presence or absence of + * {@link WebApplicationContext}. * * @author Dave Syer * @see ConditionalOnWebApplication + * @see ConditionalOnNotWebApplication */ class OnWebApplicationCondition implements Condition { + private static final String WEB_CONTEXT_CLASS = "org.springframework.web.context.support.GenericWebApplicationContext"; + private static Log logger = LogFactory.getLog(OnWebApplicationCondition.class); @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { + boolean webContextRequired = metadata + .isAnnotated(ConditionalOnWebApplication.class.getName()); + boolean webApplication = isWebApplication(context, metadata); + return (webContextRequired ? webApplication : !webApplication); + } + private boolean isWebApplication(ConditionContext context, + AnnotatedTypeMetadata metadata) { String checking = ConditionLogUtils.getPrefix(logger, metadata); - if (!ClassUtils.isPresent( - "org.springframework.web.context.support.GenericWebApplicationContext", - null)) { + if (!ClassUtils.isPresent(WEB_CONTEXT_CLASS, context.getClassLoader())) { if (logger.isDebugEnabled()) { - logger.debug(checking + "Web application classes not found"); + logger.debug(checking + "web application classes not found"); } return false; } - boolean result = StringUtils.arrayToCommaDelimitedString( - context.getBeanFactory().getRegisteredScopeNames()).contains("session") - || context.getEnvironment() instanceof StandardServletEnvironment; - if (logger.isDebugEnabled()) { - logger.debug(checking + "Web application context found: " + result); - } - return result; - } - // FIXME merge with OnNotWeb... + if (context.getBeanFactory() != null) { + String[] scopes = context.getBeanFactory().getRegisteredScopeNames(); + if (ObjectUtils.containsElement(scopes, "session")) { + if (logger.isDebugEnabled()) { + logger.debug(checking + "found web application scope"); + } + return true; + } + } + + if (context.getEnvironment() instanceof StandardServletEnvironment) { + if (logger.isDebugEnabled()) { + logger.debug(checking + "found web application environment"); + } + return true; + } + + if (logger.isDebugEnabled()) { + logger.debug(checking + "is not a web application"); + } + return false; + } } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/OnNotWebApplicationConditionTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/OnNotWebApplicationConditionTests.java index 6cdcf88497..b38d7ce40a 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/OnNotWebApplicationConditionTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/OnNotWebApplicationConditionTests.java @@ -17,9 +17,6 @@ package org.springframework.boot.autoconfigure.condition; import org.junit.Test; -import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.autoconfigure.condition.OnNotWebApplicationCondition; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -29,7 +26,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** - * Tests for {@link OnNotWebApplicationCondition}. + * Tests for {@link ConditionalOnNotWebApplication}. * * @author Dave Syer */