如何以编程方式按名称getBean()

时间:2012-07-09 10:09:32

标签: java spring

我正在使用Spring3.1

我已经以编程方式注册了Bean,我想以编程方式检索它,但没有成功。

public void createBean(String beanName, String beanParam) {
    System.out.println("beanName=" + beanName + " beanParam=" + beanParam);
    ApplicationContext context = ApplicationContextSingleton.getApplicationContext();
    StaticApplicationContext innerContext;= new StaticApplicationContext(context);
    innerContext.registerSingleton("beanName", FixSessionBean.class);
    configureBean(innerContext, beanName, beanParam);
} 

public void configureBean(ApplicationContext innerContext, String beanName, String beanParam) {
    innerContext.getBean(beanName);
    FixSessionBean fixSessionBean = (FixSessionBean) innerContext.getBean(beanName);
}

来自我的applicationContext:

<bean id="FixSessionBean" class="com.finbird.fixgw.beans.FixSessionBean" />

以下是一些日志证据:

beanName=mm1 beanParam=mm2
2012-07-09 13:07:31,016 com.fixgw.test.TriggerBean [ERROR] org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'mm1' is defined
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'mm1' is defined

任何想法为什么它不顺利?

感谢。

2 个答案:

答案 0 :(得分:2)

不是这一行

innerContext.registerSingleton("beanName", FixSessionBean.class);

注册名为“beanName”的bean,而不是beanName - 参数的值?也许你打算改用参数。

答案 1 :(得分:0)

如果你想获得那个,你应该将bean类名称传递给FixSessionBean.class,如果你发布了所有内容,你的appctx中没有定义mm1。