|
23 | 23 | import org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator;
|
24 | 24 | import org.springframework.aop.interceptor.SimpleTraceInterceptor;
|
25 | 25 | import org.springframework.aop.support.DefaultPointcutAdvisor;
|
| 26 | +import org.springframework.beans.factory.support.RootBeanDefinition; |
26 | 27 |
|
27 | 28 | import static org.hamcrest.CoreMatchers.*;
|
28 | 29 | import static org.junit.Assert.*;
|
@@ -55,6 +56,39 @@ public void beanMethodOverriding() {
|
55 | 56 | assertTrue(ctx.getDefaultListableBeanFactory().containsSingleton("testBean"));
|
56 | 57 | }
|
57 | 58 |
|
| 59 | + @Test |
| 60 | + public void beanMethodOverridingOnASM() { |
| 61 | + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); |
| 62 | + ctx.registerBeanDefinition("config", new RootBeanDefinition(OverridingConfig.class.getName())); |
| 63 | + ctx.setAllowBeanDefinitionOverriding(false); |
| 64 | + ctx.refresh(); |
| 65 | + assertFalse(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")); |
| 66 | + assertEquals("overridden", ctx.getBean("testBean", TestBean.class).toString()); |
| 67 | + assertTrue(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")); |
| 68 | + } |
| 69 | + |
| 70 | + @Test |
| 71 | + public void beanMethodOverridingWithNarrowedReturnType() { |
| 72 | + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); |
| 73 | + ctx.register(NarrowedOverridingConfig.class); |
| 74 | + ctx.setAllowBeanDefinitionOverriding(false); |
| 75 | + ctx.refresh(); |
| 76 | + assertFalse(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")); |
| 77 | + assertEquals("overridden", ctx.getBean("testBean", TestBean.class).toString()); |
| 78 | + assertTrue(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")); |
| 79 | + } |
| 80 | + |
| 81 | + @Test |
| 82 | + public void beanMethodOverridingWithNarrowedReturnTypeOnASM() { |
| 83 | + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); |
| 84 | + ctx.registerBeanDefinition("config", new RootBeanDefinition(NarrowedOverridingConfig.class.getName())); |
| 85 | + ctx.setAllowBeanDefinitionOverriding(false); |
| 86 | + ctx.refresh(); |
| 87 | + assertFalse(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")); |
| 88 | + assertEquals("overridden", ctx.getBean("testBean", TestBean.class).toString()); |
| 89 | + assertTrue(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")); |
| 90 | + } |
| 91 | + |
58 | 92 | @Test
|
59 | 93 | public void beanMethodOverloadingWithoutInheritance() {
|
60 | 94 | AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
|
@@ -173,6 +207,26 @@ public String toString() {
|
173 | 207 | }
|
174 | 208 |
|
175 | 209 |
|
| 210 | + static class ExtendedTestBean extends TestBean { |
| 211 | + } |
| 212 | + |
| 213 | + |
| 214 | + @Configuration |
| 215 | + static class NarrowedOverridingConfig extends BaseConfig { |
| 216 | + |
| 217 | + @Bean @Lazy |
| 218 | + @Override |
| 219 | + public ExtendedTestBean testBean() { |
| 220 | + return new ExtendedTestBean() { |
| 221 | + @Override |
| 222 | + public String toString() { |
| 223 | + return "overridden"; |
| 224 | + } |
| 225 | + }; |
| 226 | + } |
| 227 | + } |
| 228 | + |
| 229 | + |
176 | 230 | @Configuration
|
177 | 231 | static class ConfigWithOverloading {
|
178 | 232 |
|
|
0 commit comments