当前位置: 首页 > 知识库问答 >
问题:

Spring原型到单例并在另一个类中获取值

王景山
2023-03-14
@Component
scope("prototype")
Class A{

}

A类是bean范围原型

@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是自动连线的,并设置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();

}

如何使用springAnnotations或XML在类D中使用B获取A的值

共有1个答案

松霖
2023-03-14

就我从你的OP中了解到的,在你的项目中,你想将组件D与组件C分开,或者你只是有这样一种情况,即你不能在不涉及C或B的情况下生成组件A。

这里的问题是,你错过了更好地解释你的情况。

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

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

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

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

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

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

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

建议你去掉b中A的依赖。

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

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

然后,从组件 D 中,您可以通过访问应用程序上下文来获取 A bean,这里有一些有关如何执行此操作的详细信息。但请记住,不建议将其作为最佳实践。

所有这些考虑都是对你到目前为止所写内容的猜测,许多可能使所有细节无效的细节都被遗漏了。

请分享一个更详细的问题以获得正确的答案。我只是希望这有助于你找出更好的理解你的情况,如果不能解决的话。

 类似资料:
  • 我有一个类,它调用两个单例类FirstClass和SecondClass,如下所示。有没有一种方法可以在第二类中访问第一类中计算的数据。在这种情况下,我不想在第二类中进行外部服务调用,因为第一类已经调用了它。相反,只需在第二个数据函数中使用数据(存储在第一类函数中)。有什么方法可以做到。

  • 我从Rabbitmq中的队列收到了这条json消息: 然后我需要映射到这个模型类: 为此,我在@RabbitListener类中执行了此操作: 另一方面,我有一个服务类,它在customer类中为我提供customer对象,该对象需要添加到我的模型类中,并提供一个特定的id,如下所示: 最后,我的问题是如何将这个对象添加到模型类中?所以我可以在《邮递员》中看到这样的内容:

  • 这里Book是根类,即最终的CSV将命名为books.CSV。 使用,我们只获得字段名title和author,但是我们还需要来自author类的字段名(name和age),有没有方法获得这些字段名?

  • 问题内容: 您能否获得2个具有相同基础类型的单例实例? 在春季,这显然是微不足道的,因为它基于您将范围附加到其上的命名实例,但是我看不到关于将类型绑定到实现类的指南。请注意,由于有问题的实例通过guice注入了其他依赖项,因此我不想绑定到该实例。 问题答案: Guice也很容易!创建两个招标注解,说和,然后 然后

  • 问题内容: 我有两节课 在ABC班 我想在另一个课程中使用它,让我们说DEF课程 但是它说java.lang.NullPointerException,你知道吗?谢谢 这是我的ABC类的代码,我想在另一类> _ <中使用它们 问题答案: 您需要在内存中分配ABC,否则它指向,因此NullPointerException: 编辑 :好的,如果ABC没有像这样的零参数构造函数: 您有两种选择来解决您的

  • Spring具有bean类型/作用域,如 -singleton bean(每个应用程序上下文只有一个bean), -prototype bean(每个请求一个新bean) 现在,如果在单例bean中有对原型bean的引用,是否有办法在对单例bean的每个请求中获得一个新的原型bean(在单例bean中)。< br >如果是,配置会是什么样的?