/** * Creates a new {@link BeanFactory}, populates it with a {@link BeanDefinition} for * each of the given {@link Configuration} <var>configClasses</var>, and then * post-processes the factory using JavaConfig's {@link ConfigurationClassPostProcessor}. * When complete, the factory is ready to service requests for any {@link Bean} methods * declared by <var>configClasses</var>. */ private ListableBeanFactory initBeanFactory(Class<?>... configClasses) { DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); for (Class<?> configClass : configClasses) { String configBeanName = configClass.getName(); factory.registerBeanDefinition(configBeanName, new RootBeanDefinition(configClass)); } ConfigurationClassPostProcessor ccpp = new ConfigurationClassPostProcessor(); ccpp.postProcessBeanDefinitionRegistry(factory); ccpp.postProcessBeanFactory(factory); RequiredAnnotationBeanPostProcessor rapp = new RequiredAnnotationBeanPostProcessor(); rapp.setBeanFactory(factory); factory.addBeanPostProcessor(rapp); factory.freezeConfiguration(); return factory; }
@Test public void configurationClassesMayNotBeFinal() { @Configuration final class Config { } BeanDefinition configBeanDef = rootBeanDefinition(Config.class).getBeanDefinition(); DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); beanFactory.registerBeanDefinition("config", configBeanDef); try { ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor(); pp.postProcessBeanFactory(beanFactory); fail("expected exception"); } catch (BeanDefinitionParsingException ex) { assertTrue(ex.getMessage(), ex.getMessage().contains("Remove the final modifier")); } }
private GenericApplicationContext createContext(Class<?> configClass) { DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); if (customScope != null) { beanFactory.registerScope(SCOPE, customScope); } beanFactory.registerBeanDefinition("config", new RootBeanDefinition(configClass)); GenericApplicationContext ctx = new GenericApplicationContext(beanFactory); ctx.addBeanFactoryPostProcessor(new ConfigurationClassPostProcessor()); ctx.refresh(); return ctx; }
@Test public void repro() { GenericApplicationContext ctx = new GenericApplicationContext(); ctx.registerBeanDefinition("a", new RootBeanDefinition(ConfigurationClassPostProcessor.class)); ctx.registerBeanDefinition("b", new RootBeanDefinition(ConfigurationClassPostProcessor.class)); ctx.registerBeanDefinition("myConfig", new RootBeanDefinition(Config.class)); ctx.refresh(); }
private void assertAdviceWasApplied(Class<?> configClass) { DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); new XmlBeanDefinitionReader(factory).loadBeanDefinitions( new ClassPathResource("aspectj-autoproxy-config.xml", ConfigurationClassAspectIntegrationTests.class)); GenericApplicationContext ctx = new GenericApplicationContext(factory); ctx.addBeanFactoryPostProcessor(new ConfigurationClassPostProcessor()); ctx.registerBeanDefinition("config", new RootBeanDefinition(configClass)); ctx.refresh(); TestBean testBean = ctx.getBean("testBean", TestBean.class); assertThat(testBean.getName(), equalTo("name")); testBean.absquatulate(); assertThat(testBean.getName(), equalTo("advisedName")); }
private DefaultListableBeanFactory processConfigurationClasses(Class<?>... classes) { DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); for (Class<?> clazz : classes) { beanFactory.registerBeanDefinition(clazz.getSimpleName(), new RootBeanDefinition(clazz)); } ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor(); pp.postProcessBeanFactory(beanFactory); return beanFactory; }
@Test public void testProcessImportsWithAsm() { int configClasses = 2; int beansInClasses = 2; DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); beanFactory.registerBeanDefinition("config", new RootBeanDefinition(ConfigurationWithImportAnnotation.class.getName())); ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor(); pp.postProcessBeanFactory(beanFactory); assertThat(beanFactory.getBeanDefinitionCount(), equalTo(configClasses + beansInClasses)); }
@Test public void testImportAnnotationWithMultipleArgumentsResultingInOverriddenBeanDefinition() { DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); beanFactory.registerBeanDefinition("config", new RootBeanDefinition( WithMultipleArgumentsThatWillCauseDuplication.class)); ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor(); pp.postProcessBeanFactory(beanFactory); assertThat(beanFactory.getBeanDefinitionCount(), equalTo(4)); assertThat(beanFactory.getBean("foo", ITestBean.class).getName(), equalTo("foo2")); }
private AbstractBeanDefinition beanDef(Class<?> configClass) { DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); factory.registerBeanDefinition("config", new RootBeanDefinition(configClass)); ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor(); pp.postProcessBeanFactory(factory); return (AbstractBeanDefinition) factory.getBeanDefinition("foo"); }
/** * Creates a new {@link BeanFactory}, populates it with a {@link BeanDefinition} for * each of the given {@link Configuration} <var>configClasses</var>, and then * post-processes the factory using JavaConfig's {@link ConfigurationClassPostProcessor}. * When complete, the factory is ready to service requests for any {@link Bean} methods * declared by <var>configClasses</var>. */ private ListableBeanFactory initBeanFactory(Class<?>... configClasses) { DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); for (Class<?> configClass : configClasses) { String configBeanName = configClass.getName(); factory.registerBeanDefinition(configBeanName, new RootBeanDefinition(configClass)); } ConfigurationClassPostProcessor ccpp = new ConfigurationClassPostProcessor(); ccpp.postProcessBeanDefinitionRegistry(factory); ccpp.postProcessBeanFactory(factory); RequiredAnnotationBeanPostProcessor rapp = new RequiredAnnotationBeanPostProcessor(); rapp.setBeanFactory(factory); factory.addBeanPostProcessor(rapp); return factory; }
private GenericApplicationContext createContext(org.springframework.beans.factory.config.Scope customScope, Class<?> configClass) { DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); if (customScope != null) { beanFactory.registerScope(SCOPE, customScope); } beanFactory.registerBeanDefinition("config", new RootBeanDefinition(configClass)); GenericApplicationContext ctx = new GenericApplicationContext(beanFactory); ctx.addBeanFactoryPostProcessor(new ConfigurationClassPostProcessor()); ctx.refresh(); return ctx; }