@Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { for (String beanName : beanFactory.getBeanDefinitionNames()) { try { BeanDefinition def = beanFactory.getBeanDefinition(beanName); if (def.getBeanClassName() != null) Class.forName(def.getBeanClassName()); processNested(def); } catch (ClassNotFoundException ignored) { ((BeanDefinitionRegistry)beanFactory).removeBeanDefinition(beanName); } } } };
private void registerMock(ConfigurableListableBeanFactory beanFactory, BeanDefinitionRegistry registry, MockDefinition definition) { BeanDefinition beanDefinition = createBeanDefinition(definition); String beanName = getBeanName(beanFactory, registry, definition, beanDefinition); String transformedBeanName = BeanFactoryUtils.transformedBeanName(beanName); beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(1, beanName); if (registry.containsBeanDefinition(transformedBeanName)) { registry.removeBeanDefinition(transformedBeanName); } registry.registerBeanDefinition(transformedBeanName, beanDefinition); Object mock = createMock(definition, beanName); beanFactory.registerSingleton(transformedBeanName, mock); registerAliases(beanFactory, definition, transformedBeanName); }
|| beanDefinition.getBeanClassName().equals(LateStageMergeBeanPostProcessor.class.getName()))) { if (!isBroadleafBean(beanDefinition)) { registry.removeBeanDefinition(name); clientBeanPostProcessors.put(name, beanDefinition);
/** * If registry contains the bean, remove it first (destroying existing singletons). * * @param beanName name of the bean */ private void removeIfExists(String beanName) { if (registry.containsBeanDefinition(beanName)) { LOGGER.debug("Removing bean definition '{}'", beanName); DefaultListableBeanFactory bf = maybeRegistryToBeanFactory(); if (bf != null) { ResetRequestMappingCaches.reset(bf); } registry.removeBeanDefinition(beanName); ResetSpringStaticCaches.reset(); if (bf != null) { ResetBeanPostProcessorCaches.reset(bf); } } }
/** * Read a particular {@link ConfigurationClass}, registering bean definitions * for the class itself and all of its {@link Bean} methods. */ private void loadBeanDefinitionsForConfigurationClass( ConfigurationClass configClass, TrackedConditionEvaluator trackedConditionEvaluator) { if (trackedConditionEvaluator.shouldSkip(configClass)) { String beanName = configClass.getBeanName(); if (StringUtils.hasLength(beanName) && this.registry.containsBeanDefinition(beanName)) { this.registry.removeBeanDefinition(beanName); } this.importRegistry.removeImportingClass(configClass.getMetadata().getClassName()); return; } if (configClass.isImported()) { registerBeanDefinitionForImportedConfigurationClass(configClass); } for (BeanMethod beanMethod : configClass.getBeanMethods()) { loadBeanDefinitionsForBeanMethod(beanMethod); } loadBeanDefinitionsFromImportedResources(configClass.getImportedResources()); loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars()); }
/** * Read a particular {@link ConfigurationClass}, registering bean definitions * for the class itself and all of its {@link Bean} methods. */ private void loadBeanDefinitionsForConfigurationClass( ConfigurationClass configClass, TrackedConditionEvaluator trackedConditionEvaluator) { if (trackedConditionEvaluator.shouldSkip(configClass)) { String beanName = configClass.getBeanName(); if (StringUtils.hasLength(beanName) && this.registry.containsBeanDefinition(beanName)) { this.registry.removeBeanDefinition(beanName); } this.importRegistry.removeImportingClass(configClass.getMetadata().getClassName()); return; } if (configClass.isImported()) { registerBeanDefinitionForImportedConfigurationClass(configClass); } for (BeanMethod beanMethod : configClass.getBeanMethods()) { loadBeanDefinitionsForBeanMethod(beanMethod); } loadBeanDefinitionsFromImportedResources(configClass.getImportedResources()); loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars()); }
@Override public Object unregisterObject(String key) throws RegistrationException { Object object = applicationContext.getBean(key); if (applicationContext.getBeanFactory().containsBeanDefinition(key)) { ((BeanDefinitionRegistry) applicationContext.getBeanFactory()).removeBeanDefinition(key); } ((DefaultListableBeanFactory) applicationContext.getBeanFactory()).destroySingleton(key); return object; }
/** * Destroy an {@link IntegrationFlow} bean (as well as all its dependant beans) * for provided {@code flowId} and clean up all the local cache for it. * @param flowId the bean name to destroy from */ @Override public void remove(String flowId) { if (this.registry.containsKey(flowId)) { IntegrationFlowRegistration flowRegistration = this.registry.remove(flowId); flowRegistration.stop(); removeDependantBeans(flowId); this.beanDefinitionRegistry.removeBeanDefinition(flowId); } else { throw new IllegalStateException("An IntegrationFlow with the id " + "[" + flowId + "] doesn't exist in the registry."); } }
private void autoRegisterBeanDefinition(String id, BeanDefinition definition, ParserContext parserContext, String contextId) { // it is a bit cumbersome to work with the spring bean definition parser // as we kinda need to eagerly register the bean definition on the parser context // and then later we might find out that we should not have done that in case we have multiple camel contexts // that would have a id clash by auto registering the same bean definition with the same id such as a producer template // see if we have already auto registered this id BeanDefinition existing = autoRegisterMap.get(id); if (existing == null) { // no then add it to the map and register it autoRegisterMap.put(id, definition); parserContext.registerComponent(new BeanComponentDefinition(definition, id)); if (LOG.isDebugEnabled()) { LOG.debug("Registered default: {} with id: {} on camel context: {}", definition.getBeanClassName(), id, contextId); } } else { // ups we have already registered it before with same id, but on another camel context // this is not good so we need to remove all traces of this auto registering. // end user must manually add the needed XML elements and provide unique ids access all camel context himself. LOG.debug("Unregistered default: {} with id: {} as we have multiple camel contexts and they must use unique ids." + " You must define the definition in the XML file manually to avoid id clashes when using multiple camel contexts", definition.getBeanClassName(), id); parserContext.getRegistry().removeBeanDefinition(id); } }
private void processMuleConfiguration(ComponentModel componentModel, BeanDefinitionRegistry registry) { if (componentModel.getIdentifier().equals(CONFIGURATION_IDENTIFIER)) { AtomicReference<BeanDefinition> expressionLanguage = new AtomicReference<>(); componentModel.getInnerComponents().stream().forEach(childComponentModel -> { if (areMatchingTypes(MVELExpressionLanguage.class, childComponentModel.getType())) { expressionLanguage.set(((SpringComponentModel) childComponentModel).getBeanDefinition()); } }); String defaultObjectSerializer = componentModel.getParameters().get("defaultObjectSerializer-ref"); if (defaultObjectSerializer != null) { if (defaultObjectSerializer != DEFAULT_OBJECT_SERIALIZER_NAME) { registry.removeBeanDefinition(DEFAULT_OBJECT_SERIALIZER_NAME); registry.registerAlias(defaultObjectSerializer, DEFAULT_OBJECT_SERIALIZER_NAME); } } if (expressionLanguage.get() != null) { registry.registerBeanDefinition(OBJECT_EXPRESSION_LANGUAGE, expressionLanguage.get()); } } }
private void removeDependantBeans(String parentName) { String[] dependentBeans = this.beanFactory.getDependentBeans(parentName); for (String beanName : dependentBeans) { removeDependantBeans(beanName); this.beanDefinitionRegistry.removeBeanDefinition(beanName); // TODO until https://jira.spring.io/browse/SPR-16837 String[] aliases = this.beanDefinitionRegistry.getAliases(beanName); for (String alias : aliases) { this.beanDefinitionRegistry.removeAlias(alias); } } }
@Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { bindEnvironmentIfNeeded(registry); for (String name : registry.getBeanDefinitionNames()) { BeanDefinition definition = registry.getBeanDefinition(name); if (isApplicable(registry, name, definition)) { BeanDefinitionHolder holder = new BeanDefinitionHolder(definition, name); BeanDefinitionHolder proxy = ScopedProxyUtils .createScopedProxy(holder, registry, true); definition.setScope("refresh"); if (registry.containsBeanDefinition(proxy.getBeanName())) { registry.removeBeanDefinition(proxy.getBeanName()); } registry.registerBeanDefinition(proxy.getBeanName(), proxy.getBeanDefinition()); } } }
@Test void exportAdvisedChannel() { DummyInterceptor interceptor = new DummyInterceptor(); NameMatchMethodPointcutAdvisor advisor = new NameMatchMethodPointcutAdvisor(interceptor); advisor.addMethodName("send"); MessageChannel channel = new NullChannel(); ProxyFactory factory = new ProxyFactory(channel); factory.addAdvisor(advisor); MessageChannel advised = (MessageChannel) factory.getProxy(); this.beanDefinitionRegistry.registerBeanDefinition("test", BeanDefinitionBuilder.genericBeanDefinition(MessageChannel.class, () -> advised) .getRawBeanDefinition()); MessageChannel exported = this.beanFactory.getBean("test", MessageChannel.class); exported.send(MessageBuilder.withPayload("test").build()); this.beanDefinitionRegistry.removeBeanDefinition("test"); }
ConfigurableListableBeanFactory configurableListableBeanFactory = context .getBeanFactory(); BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) configurableListableBeanFactory; // Removing the bean from container beanDefinitionRegistry.removeBeanDefinition("demo");
@Test void exportAdvisedHandler() { DummyInterceptor interceptor = new DummyInterceptor(); NameMatchMethodPointcutAdvisor advisor = new NameMatchMethodPointcutAdvisor(interceptor); advisor.addMethodName("handleMessage"); MessageHandler handler = new DummyHandler(); ProxyFactory factory = new ProxyFactory(handler); factory.addAdvisor(advisor); MessageHandler advised = (MessageHandler) factory.getProxy(); this.beanDefinitionRegistry.registerBeanDefinition("test", BeanDefinitionBuilder.genericBeanDefinition(MessageHandler.class, () -> advised) .getRawBeanDefinition()); MessageHandler exported = this.beanFactory.getBean("test", MessageHandler.class); exported.handleMessage(MessageBuilder.withPayload("test").build()); this.beanDefinitionRegistry.removeBeanDefinition("test"); }
public static void replaceDefaultRegionProvider(BeanDefinitionRegistry registry, String customGlobalRegionProvider) { if (registry.containsBeanDefinition(REGION_PROVIDER_BEAN_NAME)) { registry.removeBeanDefinition(REGION_PROVIDER_BEAN_NAME); } registry.registerAlias(customGlobalRegionProvider, REGION_PROVIDER_BEAN_NAME); }
@Override public Object unregisterObject(String key) throws RegistrationException { Object object = applicationContext.getBean(key); if (applicationContext.getBeanFactory().containsBeanDefinition(key)) { ((BeanDefinitionRegistry) applicationContext.getBeanFactory()).removeBeanDefinition(key); } ((DefaultListableBeanFactory) applicationContext.getBeanFactory()).destroySingleton(key); return object; }
@Override public Object unregisterObject(String key) throws RegistrationException { Object object = applicationContext.getBean(key); if (applicationContext.getBeanFactory().containsBeanDefinition(key)) { ((BeanDefinitionRegistry) applicationContext.getBeanFactory()).removeBeanDefinition(key); } ((DefaultListableBeanFactory) applicationContext.getBeanFactory()).destroySingleton(key); return object; }
private void register(String originalName, BeanDefinition originalDefinition, Class<?> clazz, BeanDefinitionRegistry registry) { RootBeanDefinition cbd = new RootBeanDefinition(clazz); ConstructorArgumentValues ca = new ConstructorArgumentValues(); ca.addGenericArgumentValue(originalDefinition); cbd.setConstructorArgumentValues(ca); registry.removeBeanDefinition(originalName); registry.registerBeanDefinition(originalName, cbd); } };
private void removeDependantBeans(String parentName) { String[] dependentBeans = this.beanFactory.getDependentBeans(parentName); for (String beanName : dependentBeans) { removeDependantBeans(beanName); this.beanDefinitionRegistry.removeBeanDefinition(beanName); // TODO until https://jira.spring.io/browse/SPR-16837 String[] aliases = this.beanDefinitionRegistry.getAliases(beanName); for (String alias : aliases) { this.beanDefinitionRegistry.removeAlias(alias); } } }