1 16 17 package org.springframework.beans.factory.xml; 18 19 import java.util.Arrays ; 20 import java.util.HashMap ; 21 import java.util.List ; 22 import java.util.Map ; 23 24 import org.springframework.beans.BeansException; 25 import org.springframework.beans.ITestBean; 26 import org.springframework.beans.MutablePropertyValues; 27 import org.springframework.beans.TestBean; 28 import org.springframework.beans.factory.AbstractListableBeanFactoryTests; 29 import org.springframework.beans.factory.BeanFactory; 30 import org.springframework.beans.factory.DummyFactory; 31 import org.springframework.beans.factory.LifecycleBean; 32 import org.springframework.beans.factory.config.BeanPostProcessor; 33 import org.springframework.beans.factory.support.DefaultListableBeanFactory; 34 import org.springframework.beans.factory.support.RootBeanDefinition; 35 import org.springframework.core.io.ClassPathResource; 36 37 41 public class XmlListableBeanFactoryTests extends AbstractListableBeanFactoryTests { 42 43 private DefaultListableBeanFactory parent; 44 45 private XmlBeanFactory factory; 46 47 protected void setUp() { 48 parent = new DefaultListableBeanFactory(); 49 Map m = new HashMap (); 50 m.put("name", "Albert"); 51 parent.registerBeanDefinition("father", 52 new RootBeanDefinition(TestBean.class, new MutablePropertyValues(m))); 53 m = new HashMap (); 54 m.put("name", "Roderick"); 55 parent.registerBeanDefinition("rod", 56 new RootBeanDefinition(TestBean.class, new MutablePropertyValues(m))); 57 58 this.factory = new XmlBeanFactory(new ClassPathResource("test.xml", getClass()), parent); 59 this.factory.addBeanPostProcessor(new BeanPostProcessor() { 60 public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException { 61 if (bean instanceof TestBean) { 62 ((TestBean) bean).setPostProcessed(true); 63 } 64 if (bean instanceof DummyFactory) { 65 ((DummyFactory) bean).setPostProcessed(true); 66 } 67 return bean; 68 } 69 public Object postProcessAfterInitialization(Object bean, String name) throws BeansException { 70 return bean; 71 } 72 }); 73 this.factory.addBeanPostProcessor(new LifecycleBean.PostProcessor()); 74 this.factory.preInstantiateSingletons(); 75 } 76 77 protected BeanFactory getBeanFactory() { 78 return factory; 79 } 80 81 public void testCount() { 82 assertCount(23); 83 } 84 85 public void testTestBeanCount() { 86 assertTestBeanCount(13); 87 } 88 89 public void testDescriptionButNoProperties() throws Exception { 90 TestBean validEmpty = (TestBean) getBeanFactory().getBean("validEmptyWithDescription"); 91 assertEquals(0, validEmpty.getAge()); 92 } 93 94 97 public void testAutoAliasing() throws Exception { 98 List beanNames = Arrays.asList(getListableBeanFactory().getBeanDefinitionNames()); 99 100 TestBean tb1 = (TestBean) getBeanFactory().getBean("aliased"); 101 TestBean alias1 = (TestBean) getBeanFactory().getBean("myalias"); 102 assertTrue(tb1 == alias1); 103 List tb1Aliases = Arrays.asList(getBeanFactory().getAliases("aliased")); 104 assertEquals(2, tb1Aliases.size()); 105 assertTrue(tb1Aliases.contains("myalias")); 106 assertTrue(tb1Aliases.contains("youralias")); 107 assertTrue(beanNames.contains("aliased")); 108 assertFalse(beanNames.contains("myalias")); 109 assertFalse(beanNames.contains("youralias")); 110 111 TestBean tb2 = (TestBean) getBeanFactory().getBean("multiAliased"); 112 TestBean alias2 = (TestBean) getBeanFactory().getBean("alias1"); 113 TestBean alias3 = (TestBean) getBeanFactory().getBean("alias2"); 114 TestBean alias3a = (TestBean) getBeanFactory().getBean("alias3"); 115 TestBean alias3b = (TestBean) getBeanFactory().getBean("alias4"); 116 assertTrue(tb2 == alias2); 117 assertTrue(tb2 == alias3); 118 assertTrue(tb2 == alias3a); 119 assertTrue(tb2 == alias3b); 120 121 List tb2Aliases = Arrays.asList(getBeanFactory().getAliases("multiAliased")); 122 assertEquals(4, tb2Aliases.size()); 123 assertTrue(tb2Aliases.contains("alias1")); 124 assertTrue(tb2Aliases.contains("alias2")); 125 assertTrue(tb2Aliases.contains("alias3")); 126 assertTrue(tb2Aliases.contains("alias4")); 127 assertTrue(beanNames.contains("multiAliased")); 128 assertFalse(beanNames.contains("alias1")); 129 assertFalse(beanNames.contains("alias2")); 130 assertFalse(beanNames.contains("alias3")); 131 assertFalse(beanNames.contains("alias4")); 132 133 TestBean tb3 = (TestBean) getBeanFactory().getBean("aliasWithoutId1"); 134 TestBean alias4 = (TestBean) getBeanFactory().getBean("aliasWithoutId2"); 135 TestBean alias5 = (TestBean) getBeanFactory().getBean("aliasWithoutId3"); 136 assertTrue(tb3 == alias4); 137 assertTrue(tb3 == alias5); 138 List tb3Aliases = Arrays.asList(getBeanFactory().getAliases("aliasWithoutId1")); 139 assertEquals(2, tb3Aliases.size()); 140 assertTrue(tb3Aliases.contains("aliasWithoutId2")); 141 assertTrue(tb3Aliases.contains("aliasWithoutId3")); 142 assertTrue(beanNames.contains("aliasWithoutId1")); 143 assertFalse(beanNames.contains("aliasWithoutId2")); 144 assertFalse(beanNames.contains("aliasWithoutId3")); 145 146 TestBean tb4 = (TestBean) getBeanFactory().getBean(TestBean.class.getName()); 147 assertEquals(null, tb4.getName()); 148 149 Map drs = getListableBeanFactory().getBeansOfType(DummyReferencer.class, false, false); 150 assertEquals(5, drs.size()); 151 assertTrue(drs.containsKey(DummyReferencer.class.getName())); 152 assertTrue(drs.containsKey(DummyReferencer.class.getName() + "#2")); 153 assertTrue(drs.containsKey(DummyReferencer.class.getName() + "#3")); 154 } 155 156 public void testFactoryNesting() { 157 ITestBean father = (ITestBean) getBeanFactory().getBean("father"); 158 assertTrue("Bean from root context", father != null); 159 160 TestBean rod = (TestBean) getBeanFactory().getBean("rod"); 161 assertTrue("Bean from child context", "Rod".equals(rod.getName())); 162 assertTrue("Bean has external reference", rod.getSpouse() == father); 163 164 rod = (TestBean) parent.getBean("rod"); 165 assertTrue("Bean from root context", "Roderick".equals(rod.getName())); 166 } 167 168 public void testFactoryReferences() { 169 DummyFactory factory = (DummyFactory) getBeanFactory().getBean("&singletonFactory"); 170 171 DummyReferencer ref = (DummyReferencer) getBeanFactory().getBean("factoryReferencer"); 172 assertTrue(ref.getTestBean1() == ref.getTestBean2()); 173 assertTrue(ref.getDummyFactory() == factory); 174 175 DummyReferencer ref2 = (DummyReferencer) getBeanFactory().getBean("factoryReferencerWithConstructor"); 176 assertTrue(ref2.getTestBean1() == ref2.getTestBean2()); 177 assertTrue(ref2.getDummyFactory() == factory); 178 } 179 180 public void testPrototypeReferences() { 181 DummyReferencer ref1 = (DummyReferencer) getBeanFactory().getBean("prototypeReferencer"); 183 assertTrue("Not referencing same bean twice", ref1.getTestBean1() != ref1.getTestBean2()); 184 DummyReferencer ref2 = (DummyReferencer) getBeanFactory().getBean("prototypeReferencer"); 185 assertTrue("Not the same referencer", ref1 != ref2); 186 assertTrue("Not referencing same bean twice", ref2.getTestBean1() != ref2.getTestBean2()); 187 assertTrue("Not referencing same bean twice", ref1.getTestBean1() != ref2.getTestBean1()); 188 assertTrue("Not referencing same bean twice", ref1.getTestBean2() != ref2.getTestBean2()); 189 assertTrue("Not referencing same bean twice", ref1.getTestBean1() != ref2.getTestBean2()); 190 } 191 192 public void testBeanPostProcessor() throws Exception { 193 TestBean kerry = (TestBean) getBeanFactory().getBean("kerry"); 194 TestBean kathy = (TestBean) getBeanFactory().getBean("kathy"); 195 DummyFactory factory = (DummyFactory) getBeanFactory().getBean("&singletonFactory"); 196 TestBean factoryCreated = (TestBean) getBeanFactory().getBean("singletonFactory"); 197 assertTrue(kerry.isPostProcessed()); 198 assertTrue(kathy.isPostProcessed()); 199 assertTrue(factory.isPostProcessed()); 200 assertTrue(factoryCreated.isPostProcessed()); 201 } 202 203 public void testEmptyValues() { 204 TestBean rod = (TestBean) getBeanFactory().getBean("rod"); 205 TestBean kerry = (TestBean) getBeanFactory().getBean("kerry"); 206 assertTrue("Touchy is empty", "".equals(rod.getTouchy())); 207 assertTrue("Touchy is empty", "".equals(kerry.getTouchy())); 208 } 209 210 public void testCommentsAndCdataInValue() { 211 TestBean bean = (TestBean) getBeanFactory().getBean("commentsInValue"); 212 assertEquals("Failed to handle comments and CDATA properly", "this is a <!--comment-->", bean.getName()); 213 } 214 215 } 216 | Popular Tags |