gpt4 book ai didi

java - Spring原型(prototype)转为单例并在另一个类中获取值

转载 作者:行者123 更新时间:2023-11-30 06:46:16 25 4
gpt4 key购买 nike

@Component
scope("prototype")
Class A{

}

A是bean范围原型(prototype)

@Component
Class B{

@Autowire
private A a;

public A getA() {
return a;
}

public void setA(A a) {
this.a = a;
}

}

B 属于 bean 范围 Singleton,具有 A 的 getter 和 setter

Class C{

@Autowire
private B b;

// other code

b.setA(a);

}

C类中,B被 Autowiring 并设置A的对象

Class D{

@Autowire
private B b;

// How can I get the value of A which is set in C
//something like

A a= b.getA();

}

如何使用 Spring 注解或使用 XML 在 D 类中使用 B 来获取 A 的值

最佳答案

据我从您的OP中了解到,在您的项目中,您希望将组件D与组件C分开,或者您只是遇到无法生成的情况组件A,不涉及CB

这里的问题是你没有更好地解释你的情况。

正如我在评论中所写,这里遗漏了很多信息。

我的第一个建议是:问问自己组件A是否真的应该是一个组件。

您使用范围(“prototype”)注释该类,这意味着每次访问该 bean 时都会获得它的一个新实例。

但前提是通过Spring框架访问。

当您访问普通的 java 对象时,您在 OP 中公开的逻辑肯定不会起作用。

请记住,如果由于某种原因,A 只是在适当的时间实例化,那么您可能会得到 null 值,并且必须相应地处理它与您的业务逻辑。

当您需要使用它时,您必须获取A实例或尝试构建它。我知道您认为您在D中执行此操作,但不在B中执行此操作,其中保存了A,因此您指出了潜在的错误对象。

我建议您删除BA的依赖。

在组件C中添加注释@Configuration,然后您应该创建一个用@Bean注释的方法,如下所示:

@Bean
public A getA() {
// put here the code to create A and that involves B
return a;
}

然后,从您的组件D中,您可以通过访问应用程序上下文来获取A bean here你有一些关于如何做的细节。但请记住,这并不建议作为最佳实践。

所有这些考虑因素都是对您迄今为止所写内容的猜测,并且遗漏了许多可能使所有内容无效的细节。

请分享更详细的问题以获得正确的答案。我只是希望这可以帮助您至少更好地了解您的情况(如果无法解决)。

关于java - Spring原型(prototype)转为单例并在另一个类中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43643196/

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