gpt4 book ai didi

java - 即使不从 spring 上下文调用 getBean ,也会注入(inject)新的 bean

转载 作者:行者123 更新时间:2023-11-30 07:08:47 26 4
gpt4 key购买 nike

我在配置文件中声明了一个 bean:

@Bean
@Lazy
@Scope("prototype")
public SomeClass someClass()
{
return new SomeClass();
}

然后在我的测试类中我有以下代码:

@Autowired
private SomeClass someClass;

@Before
public void setUp()
{
xyzObject.someMethod(someClass);
}

我的问题是在我的 setUp() 方法中,我只是引用 Autowiring 的 SomeClass bean,但没有使用 getBean() 从 spring 上下文中获取它,但每次在测试之前运行 setUp() 时它仍然会创建一个新的 bean。为什么会发生这种情况?原型(prototype)范围是否意味着每当在代码中的任何位置使用 bean 的引用时都会创建一个新 bean?我没有在文档中看到任何类似的指定内容。

最佳答案

这就是控制反转的本质。因为您将其注入(inject)到另一个 bean 中,所以每次实例化另一个 bean 时,spring 都会创建并提供您注入(inject)的 bean,作为包含 bean 的实例化的一部分。您不需要在此处调用 getBean()。但是,如果在某个地方您只需要 SomeClass bean 的一个实例,您可以调用 getBean() 来告诉您的 spring 环境为您提供该 bean。然而,最好避免这种做法并依靠注入(inject)。或者创建一个可以为您提供这样的Bean的工厂(尽管仍然依赖于spring)这将使您的代码不知道Spring,恕我直言,这更优雅

关于java - 即使不从 spring 上下文调用 getBean ,也会注入(inject)新的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39575654/

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