|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2002-2017 the original author or authors. |
|
|
|
* Copyright 2002-2018 the original author or authors. |
|
|
|
* |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -30,7 +30,7 @@ import org.springframework.context.annotation6.ComponentForScanning; |
|
|
|
import org.springframework.context.annotation6.ConfigForScanning; |
|
|
|
import org.springframework.context.annotation6.ConfigForScanning; |
|
|
|
import org.springframework.context.annotation6.Jsr330NamedForScanning; |
|
|
|
import org.springframework.context.annotation6.Jsr330NamedForScanning; |
|
|
|
|
|
|
|
|
|
|
|
import static java.lang.String.format; |
|
|
|
import static java.lang.String.*; |
|
|
|
import static org.hamcrest.Matchers.*; |
|
|
|
import static org.hamcrest.Matchers.*; |
|
|
|
import static org.junit.Assert.*; |
|
|
|
import static org.junit.Assert.*; |
|
|
|
import static org.springframework.util.StringUtils.*; |
|
|
|
import static org.springframework.util.StringUtils.*; |
|
|
|
@ -41,12 +41,6 @@ import static org.springframework.util.StringUtils.*; |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public class AnnotationConfigApplicationContextTests { |
|
|
|
public class AnnotationConfigApplicationContextTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test(expected = IllegalArgumentException.class) |
|
|
|
|
|
|
|
public void nullGetBeanParameterIsDisallowed() { |
|
|
|
|
|
|
|
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); |
|
|
|
|
|
|
|
context.getBean((Class<?>) null); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void scanAndRefresh() { |
|
|
|
public void scanAndRefresh() { |
|
|
|
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); |
|
|
|
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); |
|
|
|
@ -93,6 +87,39 @@ public class AnnotationConfigApplicationContextTests { |
|
|
|
assertThat(testBean.name, equalTo("foo")); |
|
|
|
assertThat(testBean.name, equalTo("foo")); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void getBeanByTypeRaisesNoSuchBeanDefinitionException() { |
|
|
|
|
|
|
|
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// attempt to retrieve a bean that does not exist
|
|
|
|
|
|
|
|
Class<?> targetType = Pattern.class; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
context.getBean(targetType); |
|
|
|
|
|
|
|
fail("Should have thrown NoSuchBeanDefinitionException"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch (NoSuchBeanDefinitionException ex) { |
|
|
|
|
|
|
|
assertThat(ex.getMessage(), containsString(format("No qualifying bean of type '%s'", targetType.getName()))); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void getBeanByTypeAmbiguityRaisesException() { |
|
|
|
|
|
|
|
ApplicationContext context = new AnnotationConfigApplicationContext(TwoTestBeanConfig.class); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
context.getBean(TestBean.class); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch (NoSuchBeanDefinitionException ex) { |
|
|
|
|
|
|
|
assertThat(ex.getMessage(), |
|
|
|
|
|
|
|
allOf( |
|
|
|
|
|
|
|
containsString("No qualifying bean of type '" + TestBean.class.getName() + "'"), |
|
|
|
|
|
|
|
containsString("tb1"), |
|
|
|
|
|
|
|
containsString("tb2") |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Tests that Configuration classes are registered according to convention |
|
|
|
* Tests that Configuration classes are registered according to convention |
|
|
|
* @see org.springframework.beans.factory.support.DefaultBeanNameGenerator#generateBeanName |
|
|
|
* @see org.springframework.beans.factory.support.DefaultBeanNameGenerator#generateBeanName |
|
|
|
@ -119,6 +146,41 @@ public class AnnotationConfigApplicationContextTests { |
|
|
|
assertNotNull(configObject); |
|
|
|
assertNotNull(configObject); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void autowiringIsEnabledByDefault() { |
|
|
|
|
|
|
|
ApplicationContext context = new AnnotationConfigApplicationContext(AutowiredConfig.class); |
|
|
|
|
|
|
|
assertThat(context.getBean(TestBean.class).name, equalTo("foo")); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void nullReturningBeanPostProcessor() { |
|
|
|
|
|
|
|
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); |
|
|
|
|
|
|
|
context.register(AutowiredConfig.class); |
|
|
|
|
|
|
|
context.getBeanFactory().addBeanPostProcessor(new BeanPostProcessor() { |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public Object postProcessBeforeInitialization(Object bean, String beanName) { |
|
|
|
|
|
|
|
return (bean instanceof TestBean ? null : bean); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public Object postProcessAfterInitialization(Object bean, String beanName) { |
|
|
|
|
|
|
|
return bean; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
context.getBeanFactory().addBeanPostProcessor(new BeanPostProcessor() { |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public Object postProcessBeforeInitialization(Object bean, String beanName) { |
|
|
|
|
|
|
|
bean.getClass().getName(); |
|
|
|
|
|
|
|
return bean; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public Object postProcessAfterInitialization(Object bean, String beanName) { |
|
|
|
|
|
|
|
bean.getClass().getName(); |
|
|
|
|
|
|
|
return bean; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
context.refresh(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void individualBeans() { |
|
|
|
public void individualBeans() { |
|
|
|
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); |
|
|
|
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); |
|
|
|
@ -262,74 +324,6 @@ public class AnnotationConfigApplicationContextTests { |
|
|
|
assertSame(context, context.getBean("b", BeanB.class).applicationContext); |
|
|
|
assertSame(context, context.getBean("b", BeanB.class).applicationContext); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void getBeanByTypeRaisesNoSuchBeanDefinitionException() { |
|
|
|
|
|
|
|
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// attempt to retrieve a bean that does not exist
|
|
|
|
|
|
|
|
Class<?> targetType = Pattern.class; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
context.getBean(targetType); |
|
|
|
|
|
|
|
fail("Should have thrown NoSuchBeanDefinitionException"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch (NoSuchBeanDefinitionException ex) { |
|
|
|
|
|
|
|
assertThat(ex.getMessage(), containsString(format("No qualifying bean of type '%s'", targetType.getName()))); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void getBeanByTypeAmbiguityRaisesException() { |
|
|
|
|
|
|
|
ApplicationContext context = new AnnotationConfigApplicationContext(TwoTestBeanConfig.class); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
context.getBean(TestBean.class); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch (NoSuchBeanDefinitionException ex) { |
|
|
|
|
|
|
|
assertThat(ex.getMessage(), |
|
|
|
|
|
|
|
allOf( |
|
|
|
|
|
|
|
containsString("No qualifying bean of type '" + TestBean.class.getName() + "'"), |
|
|
|
|
|
|
|
containsString("tb1"), |
|
|
|
|
|
|
|
containsString("tb2") |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void autowiringIsEnabledByDefault() { |
|
|
|
|
|
|
|
ApplicationContext context = new AnnotationConfigApplicationContext(AutowiredConfig.class); |
|
|
|
|
|
|
|
assertThat(context.getBean(TestBean.class).name, equalTo("foo")); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void nullReturningBeanPostProcessor() { |
|
|
|
|
|
|
|
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); |
|
|
|
|
|
|
|
context.register(AutowiredConfig.class); |
|
|
|
|
|
|
|
context.getBeanFactory().addBeanPostProcessor(new BeanPostProcessor() { |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public Object postProcessBeforeInitialization(Object bean, String beanName) { |
|
|
|
|
|
|
|
return (bean instanceof TestBean ? null : bean); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public Object postProcessAfterInitialization(Object bean, String beanName) { |
|
|
|
|
|
|
|
return bean; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
context.getBeanFactory().addBeanPostProcessor(new BeanPostProcessor() { |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public Object postProcessBeforeInitialization(Object bean, String beanName) { |
|
|
|
|
|
|
|
bean.getClass().getName(); |
|
|
|
|
|
|
|
return bean; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public Object postProcessAfterInitialization(Object bean, String beanName) { |
|
|
|
|
|
|
|
bean.getClass().getName(); |
|
|
|
|
|
|
|
return bean; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
context.refresh(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
static class Config { |
|
|
|
static class Config { |
|
|
|
@ -351,14 +345,6 @@ public class AnnotationConfigApplicationContextTests { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static class ConfigMissingAnnotation { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
|
|
|
public TestBean testBean() { |
|
|
|
|
|
|
|
return new TestBean(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
static class TwoTestBeanConfig { |
|
|
|
static class TwoTestBeanConfig { |
|
|
|
|
|
|
|
|
|
|
|
|