使用getbean

时间:2015-07-21 16:40:14

标签: java spring dependency-injection

我有一个使用Spring的Java应用程序(v3.2.4 - 我目前无法更新到v4或更高版本)。

我的应用程序在运行时接收到一些字符串,对于每个字符串,我需要创建一个类的实例,其中需要字符串才能创建该实例,但新实例还需要使用其他一些Spring bean申请。

我所做的是创建一个工厂,在每次方法调用时接收这些输入字符串,然后创建相关的实例。

现在,我的问题是:这家工厂应该如何创建这些新实例?

我想到了两种不同的方法(如果有的话,我会非常乐意听到另一种方式):

  1. 工厂自己创建实例 - 如果我选择这个选项,那么工厂也需要从应用程序中获取相当多的不同bean(这些bean正在与我正在尝试创建的新实例协作并且可以注入工厂) - 这需要对工厂进行多次注射以及一些设置
  2. 工厂要求Spring在每个方法调用上获取新实例 - 工厂可以获取beanfactory实例,然后使用getbean方法创建所需的bean(这将在每次方法调用时发生),然后在接收时设置输入字符串实例
  3. 第一个选项似乎与Spring脱钩,但需要更多的代码和设置,而第二个选项似乎需要更少的代码,但它完全耦合到Spring

    哪个是更好的选择?还有另一种我没想到的方式吗? (我显然用谷歌搜索它但没有找到启发性的东西)

    谢谢!

1 个答案:

答案 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;
    }