2011-07-28 22 views
15

modül kontrol sistemi'u geliştirmek istiyorum, böylece her bir bakla kendi LifeCycle Controller'ım tarafından yönetilebilir.Tekli bir yayın fasulyesini ApplicationContext'ten nasıl kaldırabilirim?

Ancak, ApplicationContext'ten tekli bir yaylı bebekten nasıl çıkarılacağını anlayamıyorum.

Bu ilginç bir sorun olabilir, çözmeme yardımcı olabilir misiniz?

+1

Bu, yapılması gereken çok tuhaf bir şey. Neyi başarmaya çalışıyorsun? Bize daha üst düzey bir açıklama verirseniz, belki daha geleneksel bir alternatif önerebiliriz. – skaffman

cevap

13

Fasulye tanımını kaldırmayı deneyebilirsiniz.

BeanDefinitionRegistry factory = 
    (BeanDefinitionRegistry) applicationCtx.getAutowireCapableBeanFactory(); 

(fasulye fabrika BeanDefinitionRegistry uygular): BeanDefinitionRegistry alın ve Bu sizin uygulama oluşturmak yolunda bağlıdır removeDefinition(..)

diyoruz, ama web uygulaması örneğin size göre tanım kayıt alabilirsiniz.

Fasulye örneğinin de kaldırılacağını bilmiyorum. Bir şans ver.

+2

sadece BeanFactoryAware'i uygular ve BeanFactory'yi DefaultListableBeanFactory ile yapar – jackalope

23

Çıkarma tanım hem yapar: tanımını kaldırarak ve ilgili (yani fasulye tüm konteyner referansları kaldırarak) tahrip Singleton:

((DefaultListableBeanFactory) beanFactory).destroySingleton("myBean"); 

:

((BeanDefinitionRegistry) beanFactory).removeBeanDefinition("myBean"); 

sadece o singleton'ununu çıkarmak gerekirse Eğer tekli kayıt yaptıysanız ancak herhangi bir fasulye tanımlaması tanımlamadıysanız ikinci yol özellikle yararlı olabilir, yani

((SingletonBeanRegistry) beanFactory).registerSingleton("myBean", myBeanInstance); 
İlgili konular