使用Play2.4和scala的Google Guice的循环依赖性错误
发布时间:2020-12-16 09:55:17 所属栏目:安全 来源:网络整理
导读:我的应用程序使用Play 2.4和 Scala 2.11.我开始转换现有代码以使用Play 2.4附带的Google Guice. 当我在进行第一组更改后运行代码时,我发现代码中的某些DAO失败并出现循环依赖性错误. 例如,我有两个DAO class BookDAO @Inject()(protected val personDAO : Pe
我的应用程序使用Play 2.4和
Scala 2.11.我开始转换现有代码以使用Play 2.4附带的Google Guice.
当我在进行第一组更改后运行代码时,我发现代码中的某些DAO失败并出现循环依赖性错误. 例如,我有两个DAO class BookDAO @Inject() (protected val personDAO : PersonDAO,@NamedDatabase("mysql")protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] { ... ... val personId = //some id personDAO.get(personId) } class PersonDAO @Inject() (protected val bookDAO : BookDAO,@NamedDatabase("mysql")protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] { ... ... val bookName= //some id personDAO.getByName(bookName) } 尝试访问BookDAO或PersonDAO时出现以下错误 Tried proxying schema.BookDAO to support a circular dependency,but it is not an interface. at schema.BookDAO.class(Books.scala:52) while locating schema.BookDAO 有人可以帮我解决这个错误. 提前致谢 解决方法
按如下方式定义依赖项,并将所有需要的方法从类转移到trait:
@ImplementedBy(classOf[BookDao]) trait IBookDao { // abstract defs } class BookDao @Inject()(protected val personDAO: IPersonDao,protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] with IBookDao { } @ImplementedBy(classOf[PersonDao]) trait IPersonDao { // abstract defs } class PersonDao @Inject()(protected val bookDAO: IBookDao,protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] with IPersonDao { } 如您所见,每个dao都实现了一个特征,并且所有dao依赖项都由trait注入.这使Guice有可能注入代理类并解决循环依赖问题. 关于playframework scala依赖注入here的更多细节. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |