/** Tests where the static factory method is on a different class. */ @Test public void testFactoryMethodsOnExternalClass() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); assertEquals(TestBean.class, xbf.getType("externalFactoryMethodWithoutArgs")); assertEquals(TestBean.class, xbf.getType("externalFactoryMethodWithArgs")); String[] names = xbf.getBeanNamesForType(TestBean.class); assertTrue(Arrays.asList(names).contains("externalFactoryMethodWithoutArgs")); assertTrue(Arrays.asList(names).contains("externalFactoryMethodWithArgs")); TestBean tb = (TestBean) xbf.getBean("externalFactoryMethodWithoutArgs"); assertEquals(2, tb.getAge()); assertEquals("Tristan", tb.getName()); tb = (TestBean) xbf.getBean("externalFactoryMethodWithArgs"); assertEquals(33, tb.getAge()); assertEquals("Rod", tb.getName()); assertEquals(TestBean.class, xbf.getType("externalFactoryMethodWithoutArgs")); assertEquals(TestBean.class, xbf.getType("externalFactoryMethodWithArgs")); names = xbf.getBeanNamesForType(TestBean.class); assertTrue(Arrays.asList(names).contains("externalFactoryMethodWithoutArgs")); assertTrue(Arrays.asList(names).contains("externalFactoryMethodWithArgs")); }
@Test public void testFactoryMethodWithDifferentReturnType() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); // Check that listInstance is not considered a bean of type FactoryMethods. assertTrue(List.class.isAssignableFrom(xbf.getType("listInstance"))); String[] names = xbf.getBeanNamesForType(FactoryMethods.class); assertTrue(!Arrays.asList(names).contains("listInstance")); names = xbf.getBeanNamesForType(List.class); assertTrue(Arrays.asList(names).contains("listInstance")); xbf.preInstantiateSingletons(); assertTrue(List.class.isAssignableFrom(xbf.getType("listInstance"))); names = xbf.getBeanNamesForType(FactoryMethods.class); assertTrue(!Arrays.asList(names).contains("listInstance")); names = xbf.getBeanNamesForType(List.class); assertTrue(Arrays.asList(names).contains("listInstance")); List<?> list = (List<?>) xbf.getBean("listInstance"); assertEquals(Collections.EMPTY_LIST, list); }