performance - Grails - 在普通 Groovy 类中访问 Bean 的最佳方式

标签 performance grails spring-bean

我正在尝试将现有的 bean 注入(inject)到 Groovy 类中,我知道 Grails bean 注入(inject)不适用于普通的 Groovy 类(在 src/groovy 文件夹中)。我可以通过访问 bean

Holders.applicationContext.getBean('beanName')

但是,我想知道这是否是最好的方法(从执行速度和内存使用的角度来看)。我将从一个在正常使用应用程序期间被调用数百次的方法调用一个 bean,我想知道是否有更好的方法。至少,我是否应该存储 bean 引用(也许在构造函数中),这样我就不会一遍又一遍地调用上面的代码?我可以存储对 bean 的静态引用,以便每个类都不必存储自己的引用吗?还有其他建议或改进吗?

最佳答案

您的 Groovy(或 Java)类不能使用依赖注入(inject),但它很可能直接或间接地从一个类调用,例如 Controller 或服务。与其让这个类引入它的依赖项(这与依赖注入(inject)和控制反转的想法非常强烈地运行),不如将它需要的 bean 传递给类,或者至少传递 ApplicationContext 如果这些 bean 并不总是预先知道的。

例如,与其在您的服务中执行此操作(Thing 是您的 src/groovy 类):

def someServiceMethod(...) {

   def thing = new Thing()
   thing.doSomething(42, true)

}

为其在服务中需要的 bean 添加依赖注入(inject),并将其与其他参数一起传递,无论是在构造函数中还是在单独的方法中,例如

class MyService {

   def someBean

   def someServiceMethod(...) {

      def thing = new Thing(someBean)
      thing.doSomething(42, true)

   }
}

关于performance - Grails - 在普通 Groovy 类中访问 Bean 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25999011/

相关文章:

java - Spring DriverManagerDataSource-驱动程序加载期间堆栈溢出

java - 是否可以在 Spring Framework 中使用注释设置 bean 名称?

java - 每个 Wicket 口 session 都有新 bean

android - 设置android :constantSize to 'true' in a StateListDrawable?有什么好处

performance - magento - 缓慢添加到购物车 - 大量查询

grails - 在新标签页中打开 View -Grails

grails - 保存域实例时是否可以使用映射GORM 6 “defaultValue”

asp.net - WCF 性能与简单的 ASP.NET HttpHandler

android - 蓝牙是否足够快以在两部 Android 手机之间以原始字节数组的形式传输音频数据流?

grails - 修改/覆盖 Grails 插件提供的过滤器