我正在尝试将现有的 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/