正如您所知,如果我想在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>
。
creatBean
调用AbstractAutowireCapableBeanFactory
。此方法调用另一个createBean
并且此方法具有beanDefinition
参数,但遗憾的是此方法受到保护,我无法使用它。
所以,我的问题是,我怎么能用bean定义创建bean,但是没有注册?
我已经考虑了很多,并发现我可以用两种方法处理这个问题,
registery.removeBeanDefinition
或AbstractAutowireCapableBeanFactory
创建一个包装并使用它。但是,我正在寻找一种性能更快的方法。
答案 0 :(得分:0)
也许这些适合你:
ConfigurableListableBeanFactory listableBeanFactory = (ConfigurableListableBeanFactory) this.beanFactory;
listableBeanFactory.registerSingleton("foo", foo);
foo = (Foo) listableBeanFactory.initializeBean(foo, "foo");