gpt4 book ai didi

java - 标有原型(prototype)范围的 Bean 在 Spring 中不起作用

转载 作者:搜寻专家 更新时间:2023-10-31 08:17:29 24 4
gpt4 key购买 nike

我有两个 bean,Parent 和 Child。我已声明为 Protoype 范围的子 bean。
我想要新的子对象用于调用父类中的任何子方法。例如。在下面的示例中,我希望语句 1 在不同的子对象上调用方法 sayHi,而语句 2 在不同的子对象上调用 sayHi1

一种方法是实现 ApplicationContextAware 并在调用任何子对象的方法之前使用 context.getBean("") 获取新的子对象。但我不想那样做。

还有其他选择吗?

@Component
public class Parent{

@Autowired
Child child;

public void sayHello(){
child.sayHi(); -------------- (1)
}

public void sayHello1(){
child.sayHi1(); --------------- (2)
}
}

@Component
@Scope(value=BeanDefinition.SCOPE_PROTOTYPE)
public class Child{

public void sayHi(){
System.out.println("Hi Spring 3.0");

}

public void sayHi1(){
System.out.println("Hi1 Spring 3.0 ");
}

}

最佳答案

修复只是将原型(prototype) bean 标记为作用域代理,这意味着当您将较小范围的 bean 注入(inject)较大范围时(就像您将原型(prototype)注入(inject)单例的情况)然后 bean 的代理将被注入(inject)到更大的范围内,当通过代理调用 bean 的方法时,代理会理解范围并做出适当的响应。

@Component
@Scope(value=BeanDefinition.SCOPE_PROTOTYPE, proxyMode=ScopedProxyMode.TARGET_CLASS)
public class Child{

这是一个reference

另一种选择可能是使用称为查找方法注入(inject)的东西,描述了 here

关于java - 标有原型(prototype)范围的 Bean 在 Spring 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13802636/

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