Spring 使用bean定义创建bean而不注册

Spring 使用bean定义创建bean而不注册,spring,Spring,如您所知,如果我想在spring中动态创建bean,我将使用以下截取的代码: BeanDefinitionRegistry registry = ((BeanDefinitionRegistry )factory); GenericBeanDefinition beanDefinition = new GenericBeanDefinition(); beanDefinition.setBeanClass(MyBeanClass.class); beanDefinition.setAutowir

如您所知,如果我想在spring中动态创建bean,我将使用以下截取的代码:

BeanDefinitionRegistry registry = ((BeanDefinitionRegistry )factory);
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(MyBeanClass.class);
beanDefinition.setAutowireCandidate(true);
registry.registerBeanDefinition("dynamicBean",beanDefinition);
getApplicationContext().getBean("dynamicBean");
在这种方法中,我们必须首先定义bean定义,注册,然后获取它。但是,我想在没有注册的情况下创建Bean,因此为此我使用了
createBean
方法(属于
beanFactory
)。但是,
createBean
的输入参数是
Class

一、 但是,需要使用bean定义创建bean,而不需要注册它。我还调试了我的项目,发现
createbean
是从
AbstractAutowireCapableBeanFactory
调用的。此方法调用另一个
createBean
,并且此方法具有
beanDefinition
参数,但不幸的是,此方法受到保护,我无法使用它

所以,我的问题是,如何使用bean定义创建bean,但不注册

我想了很多,发现我可以用两种方法处理这个问题

  • 获取bean后,使用注册表项将其删除。removeBeanDefinition,或
  • 为AbstractAutowireCapableBeanFactory创建一个包装器并使用它

  • 但是,我正在寻找一种执行速度更快的方法。

    也许这些方法适合您:

    ConfigurableListableBeanFactory listableBeanFactory = (ConfigurableListableBeanFactory) this.beanFactory;
    listableBeanFactory.registerSingleton("foo", foo);
    foo = (Foo) listableBeanFactory.initializeBean(foo, "foo");
    

    您是否尝试使用XML、注释或JavaConfig样式的spring配置来配置spring:是的,但我尝试以编程方式创建bean,而不使用任何一种方式。除了您已经要求的之外,您能告诉我们您正在尝试完成什么吗?您是否试图在不在应用程序上下文中注册的情况下将所有依赖项自动连接到bean?也许这很奇怪,但是如果您看到(受保护的)AbstractAutowireCapableBeanFactory的createBean方法,您可以找到我想要的,它在不在应用程序上下文中注册的情况下创建bean。