@Test public void testFactoryMethodsSingletonOnTargetClass() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); TestBean tb = (TestBean) xbf.getBean("defaultTestBean"); assertEquals("defaultInstance", tb.getName()); assertEquals(1, tb.getAge()); FactoryMethods fm = (FactoryMethods) xbf.getBean("default"); assertEquals(0, fm.getNum()); assertEquals("default", fm.getName()); assertEquals("defaultInstance", fm.getTestBean().getName()); assertEquals("setterString", fm.getStringValue()); fm = (FactoryMethods) xbf.getBean("testBeanOnly"); assertEquals(0, fm.getNum()); assertEquals("default", fm.getName()); // This comes from the test bean assertEquals("Juergen", fm.getTestBean().getName()); fm = (FactoryMethods) xbf.getBean("full"); assertEquals(27, fm.getNum()); assertEquals("gotcha", fm.getName()); assertEquals("Juergen", fm.getTestBean().getName()); FactoryMethods fm2 = (FactoryMethods) xbf.getBean("full"); assertSame(fm, fm2); xbf.destroySingletons(); assertTrue(tb.wasDestroyed()); }
/** 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 parseInternal_withMinimalConfig_shouldCreateDefaultTemplate() throws Exception { // Arrange DefaultListableBeanFactory registry = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(registry); // Act reader.loadBeanDefinitions( new ClassPathResource(getClass().getSimpleName() + "-minimal.xml", getClass())); // Assert NotificationMessagingTemplate notificationMessagingTemplate = registry.getBean(NotificationMessagingTemplate.class); assertSame( registry.getBean(AmazonSNSClient.class), ReflectionTestUtils.getField(notificationMessagingTemplate, "amazonSns")); Object cachingDestinationResolverProxy = ReflectionTestUtils.getField(notificationMessagingTemplate, "destinationResolver"); Object targetDestinationResolver = ReflectionTestUtils.getField(cachingDestinationResolverProxy, "targetDestinationResolver"); assertEquals( registry.getBean(GlobalBeanDefinitionUtils.RESOURCE_ID_RESOLVER_BEAN_NAME), ReflectionTestUtils.getField(targetDestinationResolver, "resourceIdResolver")); assertTrue( StringMessageConverter.class.isInstance( notificationMessagingTemplate.getMessageConverter())); assertEquals( String.class, ReflectionTestUtils.getField( notificationMessagingTemplate.getMessageConverter(), "serializedPayloadClass")); }
@Test public void testParseWithQueues() throws Exception { SimpleMessageListenerContainer container = beanFactory.getBean("container2", SimpleMessageListenerContainer.class); Queue queue = beanFactory.getBean("bar", Queue.class); assertEquals( "[foo, " + queue.getName() + "]", Arrays.asList(container.getQueueNames()).toString()); assertTrue(TestUtils.getPropertyValue(container, "missingQueuesFatal", Boolean.class)); assertFalse(TestUtils.getPropertyValue(container, "autoDeclare", Boolean.class)); }
@Test public void testExtendedResourceInjectionWithOverriding() { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); CommonAnnotationBeanPostProcessor bpp = new CommonAnnotationBeanPostProcessor(); bpp.setBeanFactory(bf); bf.addBeanPostProcessor(bpp); bf.registerResolvableDependency(BeanFactory.class, bf); PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); Properties props = new Properties(); props.setProperty("tb", "testBean3"); ppc.setProperties(props); ppc.postProcessBeanFactory(bf); RootBeanDefinition annotatedBd = new RootBeanDefinition(ExtendedResourceInjectionBean.class); TestBean tb5 = new TestBean(); annotatedBd.getPropertyValues().add("testBean2", tb5); bf.registerBeanDefinition("annotatedBean", annotatedBd); bf.registerBeanDefinition("annotatedBean2", new RootBeanDefinition(NamedResourceInjectionBean.class)); TestBean tb = new TestBean(); bf.registerSingleton("testBean", tb); TestBean tb2 = new TestBean(); bf.registerSingleton("testBean2", tb2); TestBean tb3 = new TestBean(); bf.registerSingleton("testBean3", tb3); TestBean tb4 = new TestBean(); bf.registerSingleton("testBean4", tb4); NestedTestBean tb6 = new NestedTestBean(); bf.registerSingleton("xy", tb6); ExtendedResourceInjectionBean bean = (ExtendedResourceInjectionBean) bf.getBean("annotatedBean"); assertTrue(bean.initCalled); assertTrue(bean.init2Called); assertSame(tb, bean.getTestBean()); assertSame(tb5, bean.getTestBean2()); assertSame(tb4, bean.getTestBean3()); assertSame(tb3, bean.getTestBean4()); assertSame(tb6, bean.testBean5); assertSame(tb6, bean.testBean6); assertSame(bf, bean.beanFactory); try { bf.getBean("annotatedBean2"); } catch (BeanCreationException ex) { assertTrue(ex.getRootCause() instanceof NoSuchBeanDefinitionException); NoSuchBeanDefinitionException innerEx = (NoSuchBeanDefinitionException) ex.getRootCause(); assertEquals("testBean9", innerEx.getBeanName()); } bf.destroySingletons(); assertTrue(bean.destroyCalled); assertTrue(bean.destroy2Called); }
@Test public void testCannotSpecifyFactoryMethodArgumentsOnSingletonAfterCreation() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); xbf.getBean("testBeanOnly"); try { xbf.getBean("testBeanOnly", new TestBean()); fail("Shouldn't allow args to be passed to a singleton"); } catch (BeanDefinitionStoreException ex) { // OK } }
@Test public void testAnonListeners() throws Exception { beanFactory.getBean( "org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer#0", SimpleMessageListenerContainer.class); beanFactory.getBean( "org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer#1", SimpleMessageListenerContainer.class); beanFactory.getBean("namedListener", SimpleMessageListenerContainer.class); beanFactory.getBean( "org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer#2", SimpleMessageListenerContainer.class); }
@Test public void testExtendedResourceInjection() { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); CommonAnnotationBeanPostProcessor bpp = new CommonAnnotationBeanPostProcessor(); bpp.setBeanFactory(bf); bf.addBeanPostProcessor(bpp); bf.registerResolvableDependency(BeanFactory.class, bf); PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); Properties props = new Properties(); props.setProperty("tb", "testBean3"); ppc.setProperties(props); ppc.postProcessBeanFactory(bf); bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(ExtendedResourceInjectionBean.class)); bf.registerBeanDefinition("annotatedBean2", new RootBeanDefinition(NamedResourceInjectionBean.class)); bf.registerBeanDefinition("annotatedBean3", new RootBeanDefinition(ConvertedResourceInjectionBean.class)); TestBean tb = new TestBean(); bf.registerSingleton("testBean", tb); TestBean tb2 = new TestBean(); bf.registerSingleton("testBean2", tb2); TestBean tb3 = new TestBean(); bf.registerSingleton("testBean3", tb3); TestBean tb4 = new TestBean(); bf.registerSingleton("testBean4", tb4); NestedTestBean tb6 = new NestedTestBean(); bf.registerSingleton("value", "5"); bf.registerSingleton("xy", tb6); bf.registerAlias("xy", "testBean9"); ExtendedResourceInjectionBean bean = (ExtendedResourceInjectionBean) bf.getBean("annotatedBean"); assertTrue(bean.initCalled); assertTrue(bean.init2Called); assertSame(tb, bean.getTestBean()); assertSame(tb2, bean.getTestBean2()); assertSame(tb4, bean.getTestBean3()); assertSame(tb3, bean.getTestBean4()); assertSame(tb6, bean.testBean5); assertSame(tb6, bean.testBean6); assertSame(bf, bean.beanFactory); NamedResourceInjectionBean bean2 = (NamedResourceInjectionBean) bf.getBean("annotatedBean2"); assertSame(tb6, bean2.testBean); ConvertedResourceInjectionBean bean3 = (ConvertedResourceInjectionBean) bf.getBean("annotatedBean3"); assertSame(5, bean3.value); bf.destroySingletons(); assertTrue(bean.destroyCalled); assertTrue(bean.destroy2Called); }
@Test public void testParseWithDefaults() throws Exception { SimpleMessageListenerContainer container = beanFactory.getBean("container4", SimpleMessageListenerContainer.class); assertEquals(1, ReflectionTestUtils.getField(container, "concurrentConsumers")); assertEquals(true, ReflectionTestUtils.getField(container, "defaultRequeueRejected")); }
@Test public void testProxyFactory2Lazy() throws NoSuchMethodException { ITestBean testBean = (ITestBean) factory.getBean("proxyFactory2Lazy"); assertFalse(factory.containsSingleton("target")); assertEquals(666, testBean.getAge()); assertTrue(factory.containsSingleton("target")); }
@Test public void testFactoryMethodsWithNullInstance() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); FactoryMethods fm = (FactoryMethods) xbf.getBean("null"); assertNull(fm); try { xbf.getBean("nullWithProperty"); fail("Should have thrown BeanCreationException"); } catch (BeanCreationException ex) { // expected } }
@Test public void testParseWithTx() throws Exception { SimpleMessageListenerContainer container = beanFactory.getBean("container6", SimpleMessageListenerContainer.class); assertTrue(container.isChannelTransacted()); assertEquals(5, ReflectionTestUtils.getField(container, "txSize")); }
@Test public void testParseWithDefaultQueueRejectedFalse() throws Exception { SimpleMessageListenerContainer container = beanFactory.getBean("container5", SimpleMessageListenerContainer.class); assertEquals(1, ReflectionTestUtils.getField(container, "concurrentConsumers")); assertEquals(false, ReflectionTestUtils.getField(container, "defaultRequeueRejected")); assertFalse(container.isChannelTransacted()); }
@Test public void testGetsAreNotTransactionalWithProxyFactory2DynamicProxy() throws NoSuchMethodException { this.factory.preInstantiateSingletons(); ITestBean testBean = (ITestBean) factory.getBean("proxyFactory2DynamicProxy"); assertTrue("testBean is a dynamic proxy", Proxy.isProxyClass(testBean.getClass())); doTestGetsAreNotTransactional(testBean); }
@Test public void testLazyResolutionWithCglibProxy() { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); CommonAnnotationBeanPostProcessor bpp = new CommonAnnotationBeanPostProcessor(); bpp.setBeanFactory(bf); bf.addBeanPostProcessor(bpp); bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(LazyResourceCglibInjectionBean.class)); bf.registerBeanDefinition("testBean", new RootBeanDefinition(TestBean.class)); LazyResourceCglibInjectionBean bean = (LazyResourceCglibInjectionBean) bf.getBean("annotatedBean"); assertFalse(bf.containsSingleton("testBean")); bean.testBean.setName("notLazyAnymore"); assertTrue(bf.containsSingleton("testBean")); TestBean tb = (TestBean) bf.getBean("testBean"); assertEquals("notLazyAnymore", tb.getName()); }
private void doTestValidation(String resourceName) throws Exception { DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); ; Resource resource = new ClassPathResource(resourceName, getClass()); new XmlBeanDefinitionReader(factory).loadBeanDefinitions(resource); TestBean bean = (TestBean) factory.getBean("testBean"); assertNotNull(bean); }
@Test public void testInstanceFactoryMethodWithoutArgs() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); InstanceFactory.count = 0; xbf.preInstantiateSingletons(); assertEquals(1, InstanceFactory.count); FactoryMethods fm = (FactoryMethods) xbf.getBean("instanceFactoryMethodWithoutArgs"); assertEquals("instanceFactory", fm.getTestBean().getName()); assertEquals(1, InstanceFactory.count); FactoryMethods fm2 = (FactoryMethods) xbf.getBean("instanceFactoryMethodWithoutArgs"); assertEquals("instanceFactory", fm2.getTestBean().getName()); assertSame(fm2, fm); assertEquals(1, InstanceFactory.count); }
@Test public void testParseWithAdviceChain() throws Exception { SimpleMessageListenerContainer container = beanFactory.getBean("container3", SimpleMessageListenerContainer.class); Object adviceChain = ReflectionTestUtils.getField(container, "adviceChain"); assertNotNull(adviceChain); assertEquals(3, ((Advice[]) adviceChain).length); assertTrue(TestUtils.getPropertyValue(container, "exclusive", Boolean.class)); }
@Test public void testPrivateFactoryMethod() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); TestBean tb = (TestBean) xbf.getBean("defaultTestBean.private"); assertEquals(1, tb.getAge()); }
@Test public void eventBusElement() { BeanDefinition beanDefinition = beanFactory.getBeanDefinition("eventBus"); assertNotNull("Bean definition not created", beanDefinition); assertEquals( "Wrong bean class", SimpleEventBus.class.getName(), beanDefinition.getBeanClassName()); SimpleEventBus eventBus = beanFactory.getBean("eventBus", SimpleEventBus.class); assertNotNull(eventBus); }
@Test public void testGetsAreNotTransactionalWithProxyFactory3() throws NoSuchMethodException { ITestBean testBean = (ITestBean) factory.getBean("proxyFactory3"); assertTrue("testBean is a full proxy", testBean instanceof DerivedTestBean); InvocationCounterPointcut txnCounter = (InvocationCounterPointcut) factory.getBean("txnInvocationCounterPointcut"); InvocationCounterInterceptor preCounter = (InvocationCounterInterceptor) factory.getBean("preInvocationCounterInterceptor"); InvocationCounterInterceptor postCounter = (InvocationCounterInterceptor) factory.getBean("postInvocationCounterInterceptor"); txnCounter.counter = 0; preCounter.counter = 0; postCounter.counter = 0; doTestGetsAreNotTransactional(testBean); // Can't assert it's equal to 4 as the pointcut may be optimized and only invoked once assertTrue(0 < txnCounter.counter && txnCounter.counter <= 4); assertEquals(4, preCounter.counter); assertEquals(4, postCounter.counter); }
@Test public void testFactoryMethodForJavaMailSession() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); MailSession session = (MailSession) xbf.getBean("javaMailSession"); assertEquals("someuser", session.getProperty("mail.smtp.user")); assertEquals("somepw", session.getProperty("mail.smtp.password")); }
/** @see DATAMONGO-280 */ @Test @SuppressWarnings("deprecation") public void parsesMaxAutoConnectRetryTimeCorrectly() { reader.loadBeanDefinitions(new ClassPathResource("namespace/db-factory-bean.xml")); Mongo mongo = factory.getBean(Mongo.class); assertThat( ReflectiveMongoOptionsInvokerTestUtil.getMaxAutoConnectRetryTime(mongo.getMongoOptions()), is(27L)); }
@Test public void testAnonEverything() throws Exception { SimpleMessageListenerContainer container = beanFactory.getBean( "org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer#3", SimpleMessageListenerContainer.class); assertEquals( "ex1", ReflectionTestUtils.getField( ReflectionTestUtils.getField(container, "messageListener"), "responseExchange")); container = beanFactory.getBean( "org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer#4", SimpleMessageListenerContainer.class); assertEquals( "ex2", ReflectionTestUtils.getField( ReflectionTestUtils.getField(container, "messageListener"), "responseExchange")); }
public void testFactoryNesting() { ITestBean father = (ITestBean) getBeanFactory().getBean("father"); assertTrue("Bean from root context", father != null); TestBean rod = (TestBean) getBeanFactory().getBean("rod"); assertTrue("Bean from child context", "Rod".equals(rod.getName())); assertTrue("Bean has external reference", rod.getSpouse() == father); rod = (TestBean) parent.getBean("rod"); assertTrue("Bean from root context", "Roderick".equals(rod.getName())); }
@Test public void testPostConstructAndPreDestroy() { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); bf.addBeanPostProcessor(new CommonAnnotationBeanPostProcessor()); bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(AnnotatedInitDestroyBean.class)); AnnotatedInitDestroyBean bean = (AnnotatedInitDestroyBean) bf.getBean("annotatedBean"); assertTrue(bean.initCalled); bf.destroySingletons(); assertTrue(bean.destroyCalled); }
@Test public void testFactoryMethodsWithAutowire() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); FactoryMethods fm = (FactoryMethods) xbf.getBean("fullWithAutowire"); assertEquals(27, fm.getNum()); assertEquals("gotchaAutowired", fm.getName()); assertEquals("Juergen", fm.getTestBean().getName()); }
@Test public void testPostProcessorWithNullBean() { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); bf.addBeanPostProcessor(new CommonAnnotationBeanPostProcessor()); RootBeanDefinition rbd = new RootBeanDefinition(NullFactory.class); rbd.setFactoryMethodName("create"); bf.registerBeanDefinition("bean", rbd); assertNull(bf.getBean("bean")); bf.destroySingletons(); }
@Test public void testFactoryMethodNoMatchingStaticMethod() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); try { xbf.getBean("noMatchPrototype"); fail("No static method matched"); } catch (BeanCreationException ex) { // Ok } }
@Test public void testFactoryMethodsWithInvalidDestroyMethod() { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf); reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass())); try { xbf.getBean("defaultTestBeanWithInvalidDestroyMethod"); fail("Should have thrown BeanCreationException"); } catch (BeanCreationException ex) { // expected } }