public void postProcessBeanFactory(BundleContext bundleContext, ConfigurableListableBeanFactory beanFactory) throws BeansException, OsgiException { Bundle bundle = bundleContext.getBundle(); try { // Try and load the annotation code using the bundle classloader Class<?> annotationBppClass = bundle.loadClass(ANNOTATION_BPP_CLASS); // instantiate the class final BeanPostProcessor annotationBeanPostProcessor = (BeanPostProcessor) BeanUtils.instantiateClass(annotationBppClass); // everything went okay so configure the BPP and add it to the BF ((BeanFactoryAware) annotationBeanPostProcessor).setBeanFactory(beanFactory); ((BeanClassLoaderAware) annotationBeanPostProcessor).setBeanClassLoader(beanFactory.getBeanClassLoader()); ((BundleContextAware) annotationBeanPostProcessor).setBundleContext(bundleContext); beanFactory.addBeanPostProcessor(annotationBeanPostProcessor); } catch (ClassNotFoundException exception) { log.info("Spring-DM annotation package could not be loaded from bundle [" + OsgiStringUtils.nullSafeNameAndSymName(bundle) + "]; annotation processing disabled..."); if (log.isDebugEnabled()) log.debug("Cannot load annotation injection processor", exception); } }
/** * Invoke {@link ResourceLoaderAware}, {@link BeanClassLoaderAware} and * {@link BeanFactoryAware} contracts if implemented by the given {@code bean}. */ private void invokeAwareMethods(Object importStrategyBean) { if (importStrategyBean instanceof Aware) { if (importStrategyBean instanceof EnvironmentAware) { ((EnvironmentAware) importStrategyBean).setEnvironment(this.environment); } if (importStrategyBean instanceof ResourceLoaderAware) { ((ResourceLoaderAware) importStrategyBean).setResourceLoader(this.resourceLoader); } if (importStrategyBean instanceof BeanClassLoaderAware) { ClassLoader classLoader = (this.registry instanceof ConfigurableBeanFactory ? ((ConfigurableBeanFactory) this.registry).getBeanClassLoader() : this.resourceLoader.getClassLoader()); ((BeanClassLoaderAware) importStrategyBean).setBeanClassLoader(classLoader); } if (importStrategyBean instanceof BeanFactoryAware && this.registry instanceof BeanFactory) { ((BeanFactoryAware) importStrategyBean).setBeanFactory((BeanFactory) this.registry); } } }
@Test public void configWithFactoryBeanReturnType() { ListableBeanFactory factory = initBeanFactory(ConfigWithNonSpecificReturnTypes.class); assertEquals(List.class, factory.getType("factoryBean")); assertTrue(factory.isTypeMatch("factoryBean", List.class)); assertEquals(FactoryBean.class, factory.getType("&factoryBean")); assertTrue(factory.isTypeMatch("&factoryBean", FactoryBean.class)); assertFalse(factory.isTypeMatch("&factoryBean", BeanClassLoaderAware.class)); assertFalse(factory.isTypeMatch("&factoryBean", ListFactoryBean.class)); assertTrue(factory.getBean("factoryBean") instanceof List); String[] beanNames = factory.getBeanNamesForType(FactoryBean.class); assertEquals(1, beanNames.length); assertEquals("&factoryBean", beanNames[0]); beanNames = factory.getBeanNamesForType(BeanClassLoaderAware.class); assertEquals(1, beanNames.length); assertEquals("&factoryBean", beanNames[0]); beanNames = factory.getBeanNamesForType(ListFactoryBean.class); assertEquals(1, beanNames.length); assertEquals("&factoryBean", beanNames[0]); beanNames = factory.getBeanNamesForType(List.class); assertEquals("factoryBean", beanNames[0]); }
/** * Invoke {@link ResourceLoaderAware}, {@link BeanClassLoaderAware} and * {@link BeanFactoryAware} contracts if implemented by the given {@code filter}. */ private void invokeAwareMethods(TypeFilter filter) { if (filter instanceof Aware) { if (filter instanceof EnvironmentAware) { ((EnvironmentAware) filter).setEnvironment(this.environment); } if (filter instanceof ResourceLoaderAware) { ((ResourceLoaderAware) filter).setResourceLoader(this.resourceLoader); } if (filter instanceof BeanClassLoaderAware) { ClassLoader classLoader = (this.registry instanceof ConfigurableBeanFactory ? ((ConfigurableBeanFactory) this.registry).getBeanClassLoader() : this.resourceLoader.getClassLoader()); ((BeanClassLoaderAware) filter).setBeanClassLoader(classLoader); } if (filter instanceof BeanFactoryAware && this.registry instanceof BeanFactory) { ((BeanFactoryAware) filter).setBeanFactory((BeanFactory) this.registry); } } }
/** * Invoke {@link EnvironmentAware}, {@link ResourceLoaderAware}, {@link BeanClassLoaderAware} * and {@link BeanFactoryAware} contracts if implemented by the given {@code registrar}. */ private void invokeAwareMethods(ImportBeanDefinitionRegistrar registrar) { if (registrar instanceof Aware) { if (registrar instanceof EnvironmentAware) { ((EnvironmentAware) registrar).setEnvironment(this.environment); } if (registrar instanceof ResourceLoaderAware) { ((ResourceLoaderAware) registrar).setResourceLoader(this.resourceLoader); } if (registrar instanceof BeanClassLoaderAware) { ClassLoader classLoader = (this.registry instanceof ConfigurableBeanFactory ? ((ConfigurableBeanFactory) this.registry).getBeanClassLoader() : this.resourceLoader.getClassLoader()); ((BeanClassLoaderAware) registrar).setBeanClassLoader(classLoader); } if (registrar instanceof BeanFactoryAware && this.registry instanceof BeanFactory) { ((BeanFactoryAware) registrar).setBeanFactory((BeanFactory) this.registry); } } }
public void postProcessBeanFactory(BundleContext bundleContext, ConfigurableListableBeanFactory beanFactory) throws BeansException, OsgiException { Bundle bundle = bundleContext.getBundle(); try { // Try and load the annotation code using the bundle classloader Class annotationBppClass = bundle.loadClass(ANNOTATION_BPP_CLASS); // instantiate the class final BeanPostProcessor annotationBeanPostProcessor = (BeanPostProcessor) BeanUtils.instantiateClass(annotationBppClass); // everything went okay so configure the BPP and add it to the BF ((BeanFactoryAware) annotationBeanPostProcessor).setBeanFactory(beanFactory); ((BeanClassLoaderAware) annotationBeanPostProcessor).setBeanClassLoader(beanFactory.getBeanClassLoader()); ((BundleContextAware) annotationBeanPostProcessor).setBundleContext(bundleContext); beanFactory.addBeanPostProcessor(annotationBeanPostProcessor); } catch (ClassNotFoundException exception) { log.info("Spring-DM annotation package could not be loaded from bundle [" + OsgiStringUtils.nullSafeNameAndSymName(bundle) + "]; annotation processing disabled..."); if (log.isDebugEnabled()) log.debug("Cannot load annotation injection processor", exception); } }
/** * Create a new AbstractAutowireCapableBeanFactory. */ public AbstractAutowireCapableBeanFactory() { super(); ignoreDependencyInterface(BeanNameAware.class); ignoreDependencyInterface(BeanFactoryAware.class); ignoreDependencyInterface(BeanClassLoaderAware.class); }
private void invokeAwareMethods(final String beanName, final Object bean) { if (bean instanceof Aware) { if (bean instanceof BeanNameAware) { ((BeanNameAware) bean).setBeanName(beanName); } if (bean instanceof BeanClassLoaderAware) { ((BeanClassLoaderAware) bean).setBeanClassLoader(getBeanClassLoader()); } if (bean instanceof BeanFactoryAware) { ((BeanFactoryAware) bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this); } } }
static void setBeanClassLoader(Object importer, ClassLoader cl) { ((BeanClassLoaderAware) importer).setBeanClassLoader(cl); }