正如您已经知道的,如果我想在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,但不注册呢?
我想了很多,发现我可以用两种方法来处理这个问题,
registery.removeBeanDefinition
将其从get bean中删除,或者,AbstractAutowireCapableBeanFactory
创建一个包装器并使用它。但是,我正在寻找一种能够更快执行的方法。
发布于 2014-03-27 09:40:53
也许这些是给你的:
ConfigurableListableBeanFactory listableBeanFactory = (ConfigurableListableBeanFactory) this.beanFactory;
listableBeanFactory.registerSingleton("foo", foo);
foo = (Foo) listableBeanFactory.initializeBean(foo, "foo");
https://stackoverflow.com/questions/22682997
复制相似问题