View Javadoc
1   /*
2    * Copyright 2002-2014 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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   * @author Karl Pietrzak
30   * @author Juergen Hoeller
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);  // overloaded
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 }