带有构造函数参数的原型的Spring getBean()会引发错误

时间:2016-08-27 10:33:20

标签: java spring

我面临的问题是从spring上下文获取带有一些运行时构造函数参数的原型bean。当我调用context.getBean()方法时,它会抛出此错误:

java.lang.NoSuchMethodError: org.springframework.context.ApplicationContext.getBean(Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;

我的AppConfig是这样的:

@Configuration
@ComponentScan(basePackages = "com.abc")
public class AppConfig {

    @Bean
    @Scope("prototype")
    public QueryAction getQueryAction(IoSession session, Message message) {
        return new QueryAction(session, message); 
    }

}

我获取bean的代码如下所示:

ContextProvider.getContext().getBean(QueryAction.class, session, message);

我很确定我传入的参数(session and message)是正确的类型。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

  

这只是我半开的解决方案。由于字数限制,我只能把它作为答案。

好的,这是我到目前为止所做的。

我刚刚设置了一个带有一个主要功能且只有spring依赖项的干净项目。没问题!在eclipse中,我然后检查了我之前项目的Java Build Path -> Order and Export选项卡。我发现弹簧罐在底部。由于我依赖于其他罐子和项目,所以出于测试目的,我只是将所有弹簧罐直接移动到我的源文件夹下。然后问题得到解决。

我认为问题是由于某些spring类未加载而引起的,因为我的其他依赖项具有完全相同的包名和类名。我头脑中的解决方案是使用不同的ClassLoader来加载和实例化spring applicationContext,但我不确定这是否可行。

我稍后会回到这个问题。