1

我正在使用 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);
}

从我的应用程序上下文中:

<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

知道为什么进展不顺利吗?

谢谢。

4

2 回答 2

2

这条线不是

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

使用名称“beanName”注册您的 bean,而不是beanName-parameter 的值?也许您打算改用该参数。

于 2012-07-09T10:16:33.620 回答
0

您应该传递 bean 类名称,就FixSessionBean.class好像您想获得那个一样,如果您发布的只是这些,那么您的 appctx 中没有定义 mm1。

于 2012-07-09T10:13:10.883 回答