gpt4 book ai didi

java - 每次调用其方法时都会重新创建 CGlib-wired bean

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:37 25 4
gpt4 key购买 nike

我正在观察原型(prototype)范围的类代理 Spring bean 的一些奇怪行为。我正在使用 Spring 4.1.2。

我手动创建一个 bean,然后调用它的方法 3 次。每次方法调用时都会创建一个新的类实例 - 下面的代码会打印一个新的 ID。这意味着我无法可靠地将状态存储在 bean 内。

预期:该类的单个实例。

观察:每个 bean 方法调用都会导致新的类实例创建。

我深入研究了 CGlib - 它为每个方法调用从 bean 工厂获取目标 Spring bean。 Spring bean 工厂每次都会愉快地创建一个新 bean(因为它是原型(prototype) bean)。

这是预期行为还是错误?

@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class BeanClass1 extends SomeAbstractClass implements I1, I2 {
public void tellMe() {
System.out.println(this);
}
}

BeanClass1 bean = beanFactory.getBean(BeanClass1.class);
bean.tellMe();
bean.tellMe();
bean.tellMe();

最佳答案

我已经切换到 JDK 代理,它们不会在每个 bean 方法调用上重新创建 bean。

该 bean 现在带有注释

@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)

关于java - 每次调用其方法时都会重新创建 CGlib-wired bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26903844/

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