Browse Source
[Fixes #49989913] [bs-125] @Conditional* seem to get processed multiple times?pull/1/head
13 changed files with 200 additions and 32 deletions
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
/* |
||||
* 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.bootstrap.context.annotation; |
||||
|
||||
import org.apache.commons.logging.Log; |
||||
import org.springframework.core.type.AnnotatedTypeMetadata; |
||||
import org.springframework.core.type.ClassMetadata; |
||||
import org.springframework.core.type.MethodMetadata; |
||||
|
||||
/** |
||||
* @author Dave Syer |
||||
* |
||||
*/ |
||||
public class ConditionLogUtils { |
||||
|
||||
public static String getPrefix(Log logger, AnnotatedTypeMetadata metadata) { |
||||
String prefix = ""; |
||||
if (logger.isDebugEnabled()) { |
||||
prefix = metadata instanceof ClassMetadata ? "Processing " |
||||
+ ((ClassMetadata) metadata).getClassName() + ". " |
||||
: (metadata instanceof MethodMetadata ? "Processing " |
||||
+ getMethodName((MethodMetadata) metadata) + ". " : ""); |
||||
} |
||||
return prefix; |
||||
} |
||||
|
||||
private static String getMethodName(MethodMetadata metadata) { |
||||
return metadata.getDeclaringClassName() + "#" + metadata.getMethodName(); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,69 @@
@@ -0,0 +1,69 @@
|
||||
/* |
||||
* 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.bootstrap.context.annotation; |
||||
|
||||
import org.junit.Test; |
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
import static org.junit.Assert.assertFalse; |
||||
import static org.junit.Assert.assertTrue; |
||||
|
||||
/** |
||||
* @author Dave Syer |
||||
* |
||||
*/ |
||||
public class OnMissingBeanConditionTests { |
||||
|
||||
private AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); |
||||
|
||||
@Test |
||||
public void testNameOnMissingBeanCondition() { |
||||
this.context.register(FooConfiguration.class, OnBeanNameConfiguration.class); |
||||
this.context.refresh(); |
||||
assertFalse(this.context.containsBean("bar")); |
||||
assertEquals("foo", this.context.getBean("foo")); |
||||
} |
||||
|
||||
@Test |
||||
public void testNameOnMissingBeanConditionReverseOrder() { |
||||
this.context.register(OnBeanNameConfiguration.class, FooConfiguration.class); |
||||
this.context.refresh(); |
||||
// FIXME: ideally this would be false, but the ordering is a problem
|
||||
assertTrue(this.context.containsBean("bar")); |
||||
assertEquals("foo", this.context.getBean("foo")); |
||||
} |
||||
|
||||
@Configuration |
||||
@ConditionalOnMissingBean(name = "foo") |
||||
protected static class OnBeanNameConfiguration { |
||||
@Bean |
||||
public String bar() { |
||||
return "bar"; |
||||
} |
||||
} |
||||
|
||||
@Configuration |
||||
protected static class FooConfiguration { |
||||
@Bean |
||||
public String foo() { |
||||
return "foo"; |
||||
} |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue