使用bean定义创建bean而无需注册

时间:2014-03-27 09:17:13

标签: spring

正如您所知,如果我想在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<T>

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

所以,我的问题是,我怎么能用bean定义创建bean,但是没有注册?

我已经考虑了很多,并发现我可以用两种方法处理这个问题,

  1. 获取bean后,将其从registery.removeBeanDefinition
  2. 中删除
  3. AbstractAutowireCapableBeanFactory创建一个包装并使用它。
  4. 但是,我正在寻找一种性能更快的方法。

1 个答案:

答案 0 :(得分:0)

也许这些适合你:

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

相关问题