在Spring中,如果我定义了一个原型bean,我可以在Spring Framework4.3.0.Release的当前时间使用查找方法注入来注入它。
在Grails中,如何在运行时注入原型bean?Grails 2.5.4文档展示了如何设置bean.scope='prototype“
和bean.singleton=false
,但实际上并没有给出如何注入非单件bean的示例。
我在Grails中没有看到原型作用域bean的太多使用,我看到的使用的是Spring文档中描述的模式,它直接与ApplicationContext一起工作。我假设您可以在Grails中使用与Spring中相同的方法注入方法,但这里有一个简单的工厂类,它不涉及CGLIB子类,但在其他方面是类似的。它确实从ApplicationContext检索一个原型实例,但它隐藏在实现中,不会使应用程序代码混乱:
package com.yourcompany
import groovy.transform.CompileStatic
import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware
@CompileStatic
class PrototypeFactory<T> implements ApplicationContextAware {
ApplicationContext applicationContext
final Class<T> beanClass
final String beanName
PrototypeFactory(Class<T> beanClass, String beanName) {
this.beanClass = beanClass
this.beanName = beanName
}
T getInstance() {
applicationContext.getBean(beanName, beanClass)
}
}
要使用它,请为类注册一个bean,提供原型bean的bean名称和bean类(在resources.groovy或插件的doWithSpring中):
beans = {
cartFactory(PrototypeFactory, ShoppingCart, 'shoppingCart')
}
现在,您可以注入工厂bean并调用getInstance()
,它将返回一个新的原型实例,由于它使用的是泛型,因此不需要任何转换:
class SomeClass {
PrototypeFactory<ShoppingCart> cartFactory
...
def someMethod() {
ShoppingCart newCart = cartFactory.instance
...
}
}
您可以重用factory类为各种原型bean注册您想要的数量,只要它们具有唯一的bean名称。
没有一个名称是重要的,因此将getInstance()
更改为您喜欢的任何名称,并将'Factory'更改为'Manager'或其他名称。
我使用和注释来注入一个原型bean。 然而,注入bean的行为类似于单例bean。有没有办法在mockito中注入一个原型范围bean? 我正在使用运行JUnit,并使用运行初始化模拟。
问题内容: 我试图将一个bean 注入一个bean中,以便对单例bean方法的每个新调用都具有原型bean的新实例。 考虑如下的单例豆: 我希望每次调用该方法时,都会使用一个新实例。 下面是原型bean: 似乎正在发生的事情是,Spring急于在该方法中交付PrototypeBean的新实例。也就是说,该方法中的两行代码将在每一行中创建一个prototypeBean的新实例。 因此,在第二行中,输
我需要能够创建新的bean实例——不是像在< code>proxyMode=*中那样在每次调用方法时创建,而是仅在需要时创建(例如,调用< code >)。getObject())。 我知道有,但问题是我不能在java配置中定义工厂,而必须在bean中使用硬编码字符串。所以这就是我想实现的目标:
Spring具有bean类型/作用域,如 -singleton bean(每个应用程序上下文只有一个bean), -prototype bean(每个请求一个新bean) 现在,如果在单例bean中有对原型bean的引用,是否有办法在对单例bean的每个请求中获得一个新的原型bean(在单例bean中)。< br >如果是,配置会是什么样的?
问题内容: 我在Spring上下文中有几个具有状态的bean,所以我想在单元测试之前/之后重置该状态。 我的想法是向助手类添加一个方法,该方法仅遍历Spring上下文中的所有bean,检查用或注释的方法并调用它们。 如何从中获取实例化的 bean 列表? 注意:仅迭代所有定义的bean的解决方案是没有用的,因为我有很多惰性bean,并且其中一些不能被实例化,因为这在某些测试中会失败(即,我有一个需
如何获得原始json输出。如果可能的话,我不想实现用户数据类和解析器。有什么办法吗? 标记重复的帖子(获得原始HTTP响应与改造)不是为Kotlin和我需要Kotlin版本。