为什么使用registerSingleton()注册的SpringBean在getBeanDefinitionNames()中不可见?
使用为什么使用registerSingleton()注册的SpringBean在getBeanDefinitionNames()中不可见?,spring,Spring,使用ConfigurableListableBeanFactory.registerSingleton()方法注册Springbean时,它在ApplicationContext.getBeanDefinitionNames()中不可用 这是设计的吗?也许我可以使用其他方法来获取注册的bean?因为名称getBeanDefinitionNames意味着它将返回ApplicationContext中可用的所有BeanDefinition的名称。bean定义是关于如何创建bean的配方 当使用reg
ConfigurableListableBeanFactory.registerSingleton()
方法注册Springbean时,它在ApplicationContext.getBeanDefinitionNames()中不可用
这是设计的吗?也许我可以使用其他方法来获取注册的bean?因为名称getBeanDefinitionNames
意味着它将返回ApplicationContext
中可用的所有BeanDefinition
的名称。bean定义是关于如何创建bean的配方
当使用registerSingleton
注册在ApplicationContext
范围外创建的任意bean时,这显然没有BeanDefinition
,因此它在该名称列表中不可用 您可以使用DefaultListableBeanFactory
通过@Autowired
Spring注释插入ApplicationContext
初始化ConfigurableApplicationContext
对象
ConfigurableApplicationContext configContext = ConfigurableApplicationContext) applicationContext;
使用configContext
初始化DefaultListableBeanFactory
对象
DefaultListableBeanFactory beanRegistry = (DefaultListableBeanFactory) configContext.getBeanFactory();
使用beanRegistry
实例来处理SpringBean
//Register a singleton bean
beanRegistry.registerSingleton(beanName,object);
//Destroy a singleton bean from context
beanRegistry.destroySingleton(beanName);
因为这样注册的单例没有BeanDefinition
。值得一提的是,如果注册它的BeanDefinition
(例如使用DefaultListableBeanFactory.registerBeanDefinition
),则可以通过GetBeanDefinition
使通过registerBeanDefinition
注册的bean可见如果您自己构造bean,那么就没有BeanDefinition
。