我有一个使用Spring的Java应用程序(v3.2.4 - 我目前无法更新到v4或更高版本)。
我的应用程序在运行时接收到一些字符串,对于每个字符串,我需要创建一个类的实例,其中需要字符串才能创建该实例,但新实例还需要使用其他一些Spring bean申请。
我所做的是创建一个工厂,在每次方法调用时接收这些输入字符串,然后创建相关的实例。
现在,我的问题是:这家工厂应该如何创建这些新实例?
我想到了两种不同的方法(如果有的话,我会非常乐意听到另一种方式):
第一个选项似乎与Spring脱钩,但需要更多的代码和设置,而第二个选项似乎需要更少的代码,但它完全耦合到Spring
哪个是更好的选择?还有另一种我没想到的方式吗? (我显然用谷歌搜索它但没有找到启发性的东西)
谢谢!
答案 0 :(得分:0)
方法2似乎更容易,但是从工厂返回的实例不是弹簧容器管理的。我不会和他们中的任何一个一起去。用弹簧容器注册你的实例会很好。就像这个
public void registerMyInstancewithSpringContainer() throws Exception {
MutablePropertyValues propertyValues = getExecutorBeanPropertyValue();//dynamic property fetch.
GenericBeanDefinition executorBeanDef = getBeanDefinition(propertyValues); // create bean definition.
beanDefinitionRegistry.registerBeanDefinition("myinstance", executorBeanDef);//register with registry
}
public GenericBeanDefinition getExecutorBeanDefinition(MutablePropertyValues propertyValues) {
GenericBeanDefinition executorBeanDef = new GenericBeanDefinition();
executorBeanDef.setPropertyValues(propertyValues);
executorBeanDef.setBeanClass(getExecutorClass());
executorBeanDef.setAutowireCandidate(true);
return executorBeanDef;
}