1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.beans.factory.annotation;
18
19 import org.junit.Before;
20 import org.junit.Test;
21
22 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
23 import org.springframework.beans.factory.support.RootBeanDefinition;
24 import org.springframework.tests.sample.beans.TestBean;
25
26 import static org.junit.Assert.*;
27
28
29
30
31
32 public class LookupAnnotationTests {
33
34 private DefaultListableBeanFactory beanFactory;
35
36
37 @Before
38 public void setUp() {
39 beanFactory = new DefaultListableBeanFactory();
40 AutowiredAnnotationBeanPostProcessor aabpp = new AutowiredAnnotationBeanPostProcessor();
41 aabpp.setBeanFactory(beanFactory);
42 beanFactory.addBeanPostProcessor(aabpp);
43 beanFactory.registerBeanDefinition("abstractBean", new RootBeanDefinition(AbstractBean.class));
44 RootBeanDefinition tbd = new RootBeanDefinition(TestBean.class);
45 tbd.setScope(RootBeanDefinition.SCOPE_PROTOTYPE);
46 beanFactory.registerBeanDefinition("testBean", tbd);
47 }
48
49
50 @Test
51 public void testWithoutConstructorArg() {
52 AbstractBean bean = (AbstractBean) beanFactory.getBean("abstractBean");
53 assertNotNull(bean);
54 Object expected = bean.get();
55 assertEquals(TestBean.class, expected.getClass());
56 }
57
58 @Test
59 public void testWithOverloadedArg() {
60 AbstractBean bean = (AbstractBean) beanFactory.getBean("abstractBean");
61 assertNotNull(bean);
62 TestBean expected = bean.get("haha");
63 assertEquals(TestBean.class, expected.getClass());
64 assertEquals("haha", expected.getName());
65 }
66
67 @Test
68 public void testWithOneConstructorArg() {
69 AbstractBean bean = (AbstractBean) beanFactory.getBean("abstractBean");
70 assertNotNull(bean);
71 TestBean expected = bean.getOneArgument("haha");
72 assertEquals(TestBean.class, expected.getClass());
73 assertEquals("haha", expected.getName());
74 }
75
76 @Test
77 public void testWithTwoConstructorArg() {
78 AbstractBean bean = (AbstractBean) beanFactory.getBean("abstractBean");
79 assertNotNull(bean);
80 TestBean expected = bean.getTwoArguments("haha", 72);
81 assertEquals(TestBean.class, expected.getClass());
82 assertEquals("haha", expected.getName());
83 assertEquals(72, expected.getAge());
84 }
85
86 @Test
87 public void testWithThreeArgsShouldFail() {
88 AbstractBean bean = (AbstractBean) beanFactory.getBean("abstractBean");
89 assertNotNull(bean);
90 try {
91 bean.getThreeArguments("name", 1, 2);
92 fail("TestBean does not have a three arg constructor so this should not have worked");
93 }
94 catch (AbstractMethodError ex) {
95 }
96 }
97
98
99 public static abstract class AbstractBean {
100
101 @Lookup
102 public abstract TestBean get();
103
104 @Lookup
105 public abstract TestBean get(String name);
106
107 @Lookup
108 public abstract TestBean getOneArgument(String name);
109
110 @Lookup
111 public abstract TestBean getTwoArguments(String name, int age);
112
113 public abstract TestBean getThreeArguments(String name, int age, int anotherArg);
114 }
115
116 }