|
16 | 16 |
|
17 | 17 | package org.springframework.beans.factory.annotation;
|
18 | 18 |
|
19 |
| -import static org.junit.Assert.assertEquals; |
20 |
| -import static org.junit.Assert.assertNotNull; |
21 |
| -import static org.junit.Assert.assertNotSame; |
22 |
| -import static org.junit.Assert.assertNull; |
23 |
| -import static org.junit.Assert.assertSame; |
24 |
| -import static org.junit.Assert.assertTrue; |
25 |
| -import static org.junit.Assert.fail; |
26 |
| - |
27 | 19 | import java.io.Serializable;
|
28 | 20 | import java.lang.annotation.ElementType;
|
29 | 21 | import java.lang.annotation.Retention;
|
|
33 | 25 | import java.util.Map;
|
34 | 26 |
|
35 | 27 | import org.junit.Test;
|
| 28 | + |
36 | 29 | import org.springframework.beans.factory.BeanCreationException;
|
37 | 30 | import org.springframework.beans.factory.BeanFactory;
|
38 | 31 | import org.springframework.beans.factory.FactoryBean;
|
|
43 | 36 | import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
44 | 37 | import org.springframework.beans.factory.support.GenericBeanDefinition;
|
45 | 38 | import org.springframework.beans.factory.support.RootBeanDefinition;
|
| 39 | +import org.springframework.core.Ordered; |
| 40 | +import org.springframework.core.annotation.Order; |
46 | 41 | import org.springframework.tests.sample.beans.ITestBean;
|
47 | 42 | import org.springframework.tests.sample.beans.IndexedTestBean;
|
48 | 43 | import org.springframework.tests.sample.beans.NestedTestBean;
|
49 | 44 | import org.springframework.tests.sample.beans.TestBean;
|
50 | 45 | import org.springframework.util.SerializationTestUtils;
|
51 | 46 |
|
| 47 | +import static org.junit.Assert.*; |
| 48 | + |
52 | 49 |
|
53 | 50 | /**
|
54 | 51 | * Unit tests for {@link AutowiredAnnotationBeanPostProcessor}.
|
@@ -348,6 +345,148 @@ public void testOptionalResourceInjectionWithNoDependencies() {
|
348 | 345 | bf.destroySingletons();
|
349 | 346 | }
|
350 | 347 |
|
| 348 | + @Test |
| 349 | + public void testOrderedResourceInjection() { |
| 350 | + DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); |
| 351 | + AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor(); |
| 352 | + bpp.setBeanFactory(bf); |
| 353 | + bf.addBeanPostProcessor(bpp); |
| 354 | + bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(OptionalResourceInjectionBean.class)); |
| 355 | + TestBean tb = new TestBean(); |
| 356 | + bf.registerSingleton("testBean", tb); |
| 357 | + IndexedTestBean itb = new IndexedTestBean(); |
| 358 | + bf.registerSingleton("indexedTestBean", itb); |
| 359 | + OrderedNestedTestBean ntb1 = new OrderedNestedTestBean(); |
| 360 | + ntb1.setOrder(2); |
| 361 | + bf.registerSingleton("nestedTestBean1", ntb1); |
| 362 | + OrderedNestedTestBean ntb2 = new OrderedNestedTestBean(); |
| 363 | + ntb2.setOrder(1); |
| 364 | + bf.registerSingleton("nestedTestBean2", ntb2); |
| 365 | + |
| 366 | + OptionalResourceInjectionBean bean = (OptionalResourceInjectionBean) bf.getBean("annotatedBean"); |
| 367 | + assertSame(tb, bean.getTestBean()); |
| 368 | + assertSame(tb, bean.getTestBean2()); |
| 369 | + assertSame(tb, bean.getTestBean3()); |
| 370 | + assertSame(tb, bean.getTestBean4()); |
| 371 | + assertSame(itb, bean.getIndexedTestBean()); |
| 372 | + assertEquals(2, bean.getNestedTestBeans().length); |
| 373 | + assertSame(ntb2, bean.getNestedTestBeans()[0]); |
| 374 | + assertSame(ntb1, bean.getNestedTestBeans()[1]); |
| 375 | + assertEquals(2, bean.nestedTestBeansField.length); |
| 376 | + assertSame(ntb2, bean.nestedTestBeansField[0]); |
| 377 | + assertSame(ntb1, bean.nestedTestBeansField[1]); |
| 378 | + bf.destroySingletons(); |
| 379 | + } |
| 380 | + |
| 381 | + @Test |
| 382 | + public void testAnnotationOrderedResourceInjection() { |
| 383 | + DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); |
| 384 | + AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor(); |
| 385 | + bpp.setBeanFactory(bf); |
| 386 | + bf.addBeanPostProcessor(bpp); |
| 387 | + bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(OptionalResourceInjectionBean.class)); |
| 388 | + TestBean tb = new TestBean(); |
| 389 | + bf.registerSingleton("testBean", tb); |
| 390 | + IndexedTestBean itb = new IndexedTestBean(); |
| 391 | + bf.registerSingleton("indexedTestBean", itb); |
| 392 | + FixedOrder2NestedTestBean ntb1 = new FixedOrder2NestedTestBean(); |
| 393 | + bf.registerSingleton("nestedTestBean1", ntb1); |
| 394 | + FixedOrder1NestedTestBean ntb2 = new FixedOrder1NestedTestBean(); |
| 395 | + bf.registerSingleton("nestedTestBean2", ntb2); |
| 396 | + |
| 397 | + OptionalResourceInjectionBean bean = (OptionalResourceInjectionBean) bf.getBean("annotatedBean"); |
| 398 | + assertSame(tb, bean.getTestBean()); |
| 399 | + assertSame(tb, bean.getTestBean2()); |
| 400 | + assertSame(tb, bean.getTestBean3()); |
| 401 | + assertSame(tb, bean.getTestBean4()); |
| 402 | + assertSame(itb, bean.getIndexedTestBean()); |
| 403 | + assertEquals(2, bean.getNestedTestBeans().length); |
| 404 | + assertSame(ntb2, bean.getNestedTestBeans()[0]); |
| 405 | + assertSame(ntb1, bean.getNestedTestBeans()[1]); |
| 406 | + assertEquals(2, bean.nestedTestBeansField.length); |
| 407 | + assertSame(ntb2, bean.nestedTestBeansField[0]); |
| 408 | + assertSame(ntb1, bean.nestedTestBeansField[1]); |
| 409 | + bf.destroySingletons(); |
| 410 | + } |
| 411 | + |
| 412 | + @Test |
| 413 | + public void testOrderedCollectionResourceInjection() { |
| 414 | + DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); |
| 415 | + AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor(); |
| 416 | + bpp.setBeanFactory(bf); |
| 417 | + bf.addBeanPostProcessor(bpp); |
| 418 | + RootBeanDefinition rbd = new RootBeanDefinition(OptionalCollectionResourceInjectionBean.class); |
| 419 | + rbd.setScope(RootBeanDefinition.SCOPE_PROTOTYPE); |
| 420 | + bf.registerBeanDefinition("annotatedBean", rbd); |
| 421 | + TestBean tb = new TestBean(); |
| 422 | + bf.registerSingleton("testBean", tb); |
| 423 | + IndexedTestBean itb = new IndexedTestBean(); |
| 424 | + bf.registerSingleton("indexedTestBean", itb); |
| 425 | + OrderedNestedTestBean ntb1 = new OrderedNestedTestBean(); |
| 426 | + ntb1.setOrder(2); |
| 427 | + bf.registerSingleton("nestedTestBean1", ntb1); |
| 428 | + OrderedNestedTestBean ntb2 = new OrderedNestedTestBean(); |
| 429 | + ntb2.setOrder(1); |
| 430 | + bf.registerSingleton("nestedTestBean2", ntb2); |
| 431 | + |
| 432 | + // Two calls to verify that caching doesn't break re-creation. |
| 433 | + OptionalCollectionResourceInjectionBean bean = (OptionalCollectionResourceInjectionBean) bf.getBean("annotatedBean"); |
| 434 | + bean = (OptionalCollectionResourceInjectionBean) bf.getBean("annotatedBean"); |
| 435 | + assertSame(tb, bean.getTestBean()); |
| 436 | + assertSame(tb, bean.getTestBean2()); |
| 437 | + assertSame(tb, bean.getTestBean3()); |
| 438 | + assertSame(tb, bean.getTestBean4()); |
| 439 | + assertSame(itb, bean.getIndexedTestBean()); |
| 440 | + assertEquals(2, bean.getNestedTestBeans().size()); |
| 441 | + assertSame(ntb2, bean.getNestedTestBeans().get(0)); |
| 442 | + assertSame(ntb1, bean.getNestedTestBeans().get(1)); |
| 443 | + assertEquals(2, bean.nestedTestBeansSetter.size()); |
| 444 | + assertSame(ntb2, bean.nestedTestBeansSetter.get(0)); |
| 445 | + assertSame(ntb1, bean.nestedTestBeansSetter.get(1)); |
| 446 | + assertEquals(2, bean.nestedTestBeansField.size()); |
| 447 | + assertSame(ntb2, bean.nestedTestBeansField.get(0)); |
| 448 | + assertSame(ntb1, bean.nestedTestBeansField.get(1)); |
| 449 | + bf.destroySingletons(); |
| 450 | + } |
| 451 | + |
| 452 | + @Test |
| 453 | + public void testAnnotationOrderedCollectionResourceInjection() { |
| 454 | + DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); |
| 455 | + AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor(); |
| 456 | + bpp.setBeanFactory(bf); |
| 457 | + bf.addBeanPostProcessor(bpp); |
| 458 | + RootBeanDefinition rbd = new RootBeanDefinition(OptionalCollectionResourceInjectionBean.class); |
| 459 | + rbd.setScope(RootBeanDefinition.SCOPE_PROTOTYPE); |
| 460 | + bf.registerBeanDefinition("annotatedBean", rbd); |
| 461 | + TestBean tb = new TestBean(); |
| 462 | + bf.registerSingleton("testBean", tb); |
| 463 | + IndexedTestBean itb = new IndexedTestBean(); |
| 464 | + bf.registerSingleton("indexedTestBean", itb); |
| 465 | + FixedOrder2NestedTestBean ntb1 = new FixedOrder2NestedTestBean(); |
| 466 | + bf.registerSingleton("nestedTestBean1", ntb1); |
| 467 | + FixedOrder1NestedTestBean ntb2 = new FixedOrder1NestedTestBean(); |
| 468 | + bf.registerSingleton("nestedTestBean2", ntb2); |
| 469 | + |
| 470 | + // Two calls to verify that caching doesn't break re-creation. |
| 471 | + OptionalCollectionResourceInjectionBean bean = (OptionalCollectionResourceInjectionBean) bf.getBean("annotatedBean"); |
| 472 | + bean = (OptionalCollectionResourceInjectionBean) bf.getBean("annotatedBean"); |
| 473 | + assertSame(tb, bean.getTestBean()); |
| 474 | + assertSame(tb, bean.getTestBean2()); |
| 475 | + assertSame(tb, bean.getTestBean3()); |
| 476 | + assertSame(tb, bean.getTestBean4()); |
| 477 | + assertSame(itb, bean.getIndexedTestBean()); |
| 478 | + assertEquals(2, bean.getNestedTestBeans().size()); |
| 479 | + assertSame(ntb2, bean.getNestedTestBeans().get(0)); |
| 480 | + assertSame(ntb1, bean.getNestedTestBeans().get(1)); |
| 481 | + assertEquals(2, bean.nestedTestBeansSetter.size()); |
| 482 | + assertSame(ntb2, bean.nestedTestBeansSetter.get(0)); |
| 483 | + assertSame(ntb1, bean.nestedTestBeansSetter.get(1)); |
| 484 | + assertEquals(2, bean.nestedTestBeansField.size()); |
| 485 | + assertSame(ntb2, bean.nestedTestBeansField.get(0)); |
| 486 | + assertSame(ntb1, bean.nestedTestBeansField.get(1)); |
| 487 | + bf.destroySingletons(); |
| 488 | + } |
| 489 | + |
351 | 490 | @Test
|
352 | 491 | public void testConstructorResourceInjection() {
|
353 | 492 | DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
@@ -1476,4 +1615,28 @@ public boolean isSingleton() {
|
1476 | 1615 | }
|
1477 | 1616 | }
|
1478 | 1617 |
|
| 1618 | + |
| 1619 | + public static class OrderedNestedTestBean extends NestedTestBean implements Ordered { |
| 1620 | + |
| 1621 | + private int order; |
| 1622 | + |
| 1623 | + public void setOrder(int order) { |
| 1624 | + this.order = order; |
| 1625 | + } |
| 1626 | + |
| 1627 | + @Override |
| 1628 | + public int getOrder() { |
| 1629 | + return this.order; |
| 1630 | + } |
| 1631 | + } |
| 1632 | + |
| 1633 | + |
| 1634 | + @Order(1) |
| 1635 | + public static class FixedOrder1NestedTestBean extends NestedTestBean { |
| 1636 | + } |
| 1637 | + |
| 1638 | + @Order(2) |
| 1639 | + public static class FixedOrder2NestedTestBean extends NestedTestBean { |
| 1640 | + } |
| 1641 | + |
1479 | 1642 | }
|
0 commit comments