예제 #1
0
  /** 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"));
  }
예제 #2
0
  @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);
  }