我面临的问题是从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)
是正确的类型。有人可以帮忙吗?
答案 0 :(得分:0)
这只是我半开的解决方案。由于字数限制,我只能把它作为答案。
好的,这是我到目前为止所做的。
我刚刚设置了一个带有一个主要功能且只有spring依赖项的干净项目。没问题!在eclipse中,我然后检查了我之前项目的Java Build Path -> Order and Export
选项卡。我发现弹簧罐在底部。由于我依赖于其他罐子和项目,所以出于测试目的,我只是将所有弹簧罐直接移动到我的源文件夹下。然后问题得到解决。
我认为问题是由于某些spring类未加载而引起的,因为我的其他依赖项具有完全相同的包名和类名。我头脑中的解决方案是使用不同的ClassLoader来加载和实例化spring applicationContext
,但我不确定这是否可行。
我稍后会回到这个问题。