@Test(expected = IllegalArgumentException.class) public void testDifferentResourceTypes() throws Exception { Resource resource1 = new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "abstract-context.xml")); GenericApplicationContextFactory factory = new GenericApplicationContextFactory(resource1, Configuration1.class); factory.createApplicationContext(); }
@Test public void testMultipleConfigurationClasses() throws Exception { GenericApplicationContextFactory factory = new GenericApplicationContextFactory(Configuration1.class, Configuration2.class); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals(context.getBean("bean1"), "bean1"); assertEquals(context.getBean("bean2"), "bean2"); assertEquals(context.getBean("bean3"), "bean3"); assertEquals(context.getBean("bean4"), "bean4"); }
@Test public void testPackageScanning() throws Exception { GenericApplicationContextFactory factory = new GenericApplicationContextFactory("org.springframework.batch.core.configuration.support"); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals(context.getBean("bean1"), "bean1"); assertEquals(context.getBean("bean2"), "bean2"); assertEquals(context.getBean("bean3"), "bean3"); assertEquals(context.getBean("bean4"), "bean4"); }
@Test public void testGetJobName() { GenericApplicationContextFactory factory = new GenericApplicationContextFactory( new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "trivial-context.xml"))); assertEquals("test-job", factory.createApplicationContext().getBeanNamesForType(Job.class)[0]); }
@SuppressWarnings("resource") @Test public void testParentConfigurationInherited() { GenericApplicationContextFactory factory = new GenericApplicationContextFactory( new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "child-context.xml"))); factory.setApplicationContext(new ClassPathXmlApplicationContext(ClassUtils.addResourcePathToPackagePath( getClass(), "parent-context.xml"))); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals("test-job", context.getBeanNamesForType(Job.class)[0]); assertEquals("bar", context.getBean("test-job", Job.class).getName()); assertEquals(4, context.getBean("foo", Foo.class).values[1], 0.01); }
@Test public void testCreateJob() { GenericApplicationContextFactory factory = new GenericApplicationContextFactory( new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "trivial-context.xml"))); @SuppressWarnings("resource") ConfigurableApplicationContext context = factory.createApplicationContext(); assertNotNull(context); assertTrue("Wrong id: " + context, context.getId().contains("trivial-context.xml")); }
@Test public void testParentChildLifecycleEvents() throws InterruptedException { AnnotationConfigApplicationContext parent = new AnnotationConfigApplicationContext(ParentContext.class); GenericApplicationContextFactory child = new GenericApplicationContextFactory(ChildContextConfiguration.class); child.setApplicationContext(parent); ApplicationContext context = child.createApplicationContext(); ChildBean bean = context.getBean(ChildBean.class); assertEquals(1, bean.counter1); assertEquals(1, bean.counter2); }
@SuppressWarnings("resource") @Test public void testBeanFactoryPostProcessorOrderRespected() { GenericApplicationContextFactory factory = new GenericApplicationContextFactory( new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "placeholder-context.xml"))); factory.setApplicationContext(new ClassPathXmlApplicationContext(ClassUtils.addResourcePathToPackagePath( getClass(), "parent-context.xml"))); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals("test-job", context.getBeanNamesForType(Job.class)[0]); assertEquals("spam", context.getBean("test-job", Job.class).getName()); }
@SuppressWarnings("resource") @Test public void testBeanFactoryConfigurationNotCopied() { GenericApplicationContextFactory factory = new GenericApplicationContextFactory(new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "child-context.xml"))); factory.setApplicationContext(new ClassPathXmlApplicationContext(ClassUtils.addResourcePathToPackagePath( getClass(), "parent-context.xml"))); factory.setCopyConfiguration(false); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals("test-job", context.getBeanNamesForType(Job.class)[0]); assertEquals("bar", context.getBean("test-job", Job.class).getName()); // The CustomEditorConfigurer is a BeanFactoryPostProcessor so the // editor gets copied anyway! assertEquals(4, context.getBean("foo", Foo.class).values[1], 0.01); }
@SuppressWarnings("resource") @Test public void testBeanFactoryPostProcessorsNotCopied() { GenericApplicationContextFactory factory = new GenericApplicationContextFactory( new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "child-context.xml"))); factory.setApplicationContext(new ClassPathXmlApplicationContext(ClassUtils.addResourcePathToPackagePath( getClass(), "parent-context.xml"))); @SuppressWarnings("unchecked") Class<? extends BeanFactoryPostProcessor>[] classes = (Class<? extends BeanFactoryPostProcessor>[]) new Class<?>[0]; factory.setBeanFactoryPostProcessorClasses(classes); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals("test-job", context.getBeanNamesForType(Job.class)[0]); assertEquals("${foo}", context.getBean("test-job", Job.class).getName()); assertEquals(4, context.getBean("foo", Foo.class).values[1], 0.01); }
@Test public void testBeanFactoryProfileRespected() { GenericApplicationContextFactory factory = new GenericApplicationContextFactory( new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "profiles.xml"))); @SuppressWarnings("resource") ClassPathXmlApplicationContext parentContext = new ClassPathXmlApplicationContext(ClassUtils.addResourcePathToPackagePath( getClass(), "parent-context.xml")); parentContext.getEnvironment().setActiveProfiles("preferred"); factory.setApplicationContext(parentContext); @SuppressWarnings("resource") ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals("test-job", context.getBeanNamesForType(Job.class)[0]); assertEquals("spam", context.getBean("test-job", Job.class).getName()); }
@Test public void testParentConfigurationInheritedMultipleConfigs() { Resource resource1 = new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "abstract-context.xml")); Resource resource2 = new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "child-context-with-abstract-job.xml")); GenericApplicationContextFactory factory = new GenericApplicationContextFactory(resource1, resource2); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals("concrete-job", context.getBeanNamesForType(Job.class)[0]); assertEquals("bar", context.getBean("concrete-job", Job.class).getName()); assertEquals(4, context.getBean("foo", Foo.class).values[1], 0.01); assertNotNull(context.getBean("concrete-job", JobSupport.class).getStep("step31")); assertNotNull(context.getBean("concrete-job", JobSupport.class).getStep("step32")); boolean autowiredFound = false; for (BeanPostProcessor postProcessor : ((AbstractBeanFactory) context.getBeanFactory()).getBeanPostProcessors()) { if (postProcessor instanceof AutowiredAnnotationBeanPostProcessor) { autowiredFound = true; } } assertTrue(autowiredFound); }