Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么使用registerSingleton()注册的SpringBean在getBeanDefinitionNames()中不可见?_Spring - Fatal编程技术网

为什么使用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