我刚刚在grails 2.3项目中添加了一个自定义本地插件(通过' grails.plugin.location ...'构建配置声明)。一旦我添加插件并尝试运行我的应用程序,我就会看到一种奇怪的行为,即我主应用程序中的所有bean都会突然尝试全面加载。即如果我有:
class FooService {
BarService barService
}
class BarService {
FooService fooService
}
然后应用程序无法启动。在初始化时,FooService或BarService中没有执行任何代码,这会导致Spring上下文需要解包fooService或barService实例,但这种行为似乎无论如何都会发生。最后,应用程序init失败,例外情况如下:
由以下原因引起:org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名称为“fooService':org.springframework.beans.factory.FactoryBeanNotInitializedException的bean时出错:FactoryBean尚未完全初始化
由于fooService需要barService,它需要仍在创建的fooService。
只要删除对自定义插件的依赖关系,问题就会停止。显然,插件或插件(元数据或其他内容)中的某些内容会导致此行为,但我无法弄清楚到底是什么。
而不是解决方案,我认为我在这里寻找的是一些故障排除技术或信息,使我了解为什么这种热量加载行为正在发生。我只是不知道正确的钩子/配置是什么让我进入Spring上下文初始化机制的头脑。
答案 0 :(得分:0)
我发现我的问题的答案深深埋藏在其他SO问题的评论中:Grails service using a method from another service
基本上我的插件将hibernate插件引入到我的项目中,因此也引入了默认的事务处理服务。这种事务性引导导致了所有依赖项的急切负载,从而导致了我的循环依赖性问题。
至少就目前而言,修复是将循环相关服务标记为非事务性服务。当然,如果我需要这些服务是交易性的,将来我似乎需要重新设计我的服务设置。