gpt4 book ai didi

grails - 重构 Grails 应用程序中的服务注入(inject)/实例化

转载 作者:行者123 更新时间:2023-12-02 15:24:55 24 4
gpt4 key购买 nike

我正在开发的应用程序有一项服务,其引用如下:

private def widgetServ = new WidgetService() 

在另一个服务中。在 widgetServ 上调用方法像这样:
def aVar = widgetServ.SomeMethod() 

内部 widgetServ使用以下命令创建 sql 连接:
def sql = Sql.newInstance(...

以下是我们面临的一些问题:

由于我们使用"new",我们不能使用 static transactional = true 进行隐式事务。 ,根据 Grails 文档。在尝试将 Grails 从 1.3.7 升级到 2.4.4 时,我们注意到在上面创建 sql 变量时,由于系统无法找到 jdbc 驱动程序而引发错误。
我们不想使用 new 而是注入(inject) WidgetService .

问题是有没有人遇到过这个问题,你可以发布任何陷阱吗?

系统中的另一个服务也有类似的问题,但更糟糕的是,它像 POGO 一样使用,并且有 140 多个实例在其中创建新实例。另外,一些 Controller 会注入(inject)它并创建新的。
我们应该使用什么方法来删除服务的所有"new"创建?系统确实存在过时引用和丢失数据的问题,这些问题可能是由于这些服务中缺乏事务管理而导致的。

最佳答案

你绝对不应该在这里使用“new”,因为这样创建的对象完全不知道 Spring 上下文,所以他们对配置、数据源等一无所知。
问题是,你为什么要那样做?有什么理由不定期进行依赖注入(inject)吗?不会很痛苦,只需要改变一切

private def widgetServ = new WidgetService() 


private WidgetService widgetServ

并且可能将此字段名称重构为 widgetService (在 IDE 中很容易完成)

关于grails - 重构 Grails 应用程序中的服务注入(inject)/实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29431948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com