类 A 是bean范围原型
@Component
scope("prototype")
Class A{
}
Class B 属于bean范围Singleton有getter和setter A
@Component
Class B{
@Autowire
private A a;
public A getA() {
return a;
}
public void setA(A a) {
this.a = a;
}
}
在 C 课程中, B 自动装配并设置 A
的对象Class C{
@Autowire
private B b;
// other code
b.setA(a);
}
如何使用spring Annotations或使用XML
在D类中使用B获取A的值答案 0 :(得分:1)
据我所知,在您的项目中,您希望将组件 D 与组件 C 分开,或者您只是遇到无法生成的情况组件 A ,不涉及 C 或 B 。
这里的问题是,你错过了更好地解释你的情况。
正如我在评论中所写,这里错过了许多信息。
我的第一个建议是:问问自己组件 A 是否真的应该是一个组件。
使用范围(" prototype")注释类,这意味着每次访问bean时都会得到一个新的实例。
但是只有通过Spring框架才能访问。
您在OP中公开的逻辑无法确定,因为您访问普通的java对象。
请记住,如果出于某种原因, A 只是在适当的时间实例化,而不是获得 null 值,并且必须相应地处理它与您的业务逻辑。
当您需要使用它时,您必须获取 A 实例或尝试构建它。 我知道你认为你是在 D 中做的,而不是在 B 中,其中 A 已保存,所以你指向一个潜在的错误对象。
我建议您删除 B 中 A 的依赖关系。
在组件 C 中添加注释 @Configuration ,然后您应该创建一个使用 @Bean 注释的方法,如:
@Bean
public A getA() {
// put here the code to create A and that involves B
return a;
}
然后,从您的组件 D ,您可以通过访问应用程序上下文here来获取 A bean,您可以获得有关如何执行此操作的详细信息。但请记住,不建议将其作为最佳实践。
所有这些考虑因素都是对你到目前为止所写内容的猜测,并且很多细节可能会使所有人无效。
请分享更详细的问题以获得正确答案。我希望这可以帮助你弄清楚至少可以理解你的情况,如果无法解决的话。