为了账号安全,请及时绑定邮箱和手机立即绑定

在 spring boot 中,为什么我没有将一个服务类的返回值返回给另一个服务类

在 spring boot 中,为什么我没有将一个服务类的返回值返回给另一个服务类

HUWWW 2023-04-26 17:05:31
我正在构建一个 Spring Boot 应用程序。我将有 2 个服务类 A 和 B,B.getStringNextValue() 返回一个在 A.getStringValue() 中调用的值,但 A.getStringValue() 类中 b.getStringNextValue() 的值没有任何内容/为空。我已经尝试了下面的代码,还在 StackOverflow 中搜索了一些问题,但没有一个答案解决了这个问题。@Servicepublic class A{    @Autowired    private B b;    public String getStringValue(){        StringBuilder str = new StringBuilder("Hello ");        str.append(b.getStringNextValue());        System.out.println(b.getStringNextValue()); //here nothing as output but expectation is ' World'        System.out.println(str); //here i only get 'Hello ' But expectation is 'Hello World'        return str.toString();    }}而B.java,@Servicepublic class B {    public StringBuilder getStringNextValue() {        StringBuilder str = new StringBuilder();        str.append(" World");        System.out.println(str.toString()); //Here i get ' World'        return str;    }}我不知道为什么我会得到这种类型的输出。任何人都可以描述它并建议我一些解决方案吗?谢谢。
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

我测试了你的代码,并没有获得与你相同的打印结果。你如何测试你的代码?这是我的单元测试,在之后的代码中有注释'zp:'。请注意,b.getStringNextValue()每次都发送“World”。而且我在最后获得了“Hello World” System.out.println(str)。希望它能帮助你。


A类:


package test;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;


@Service

public class A {


    @Autowired

    private B b;


    public String getStringValue() {

        StringBuilder str = new StringBuilder("Hello ");

        str.append(b.getStringNextValue()); // zp: This line prints ' World' AND make str = 'Hello World'

        System.out.println(b.getStringNextValue()); // here nothing as output but expectation is ' World' -> zp: Prints ' World'

        System.out.println(str); // here i only get 'Hello ' But expectation is 'Hello World' -> zp: 'Hello World' is printed

        return str.toString();

    }

}

B类:


package test;


import org.springframework.stereotype.Service;


@Service

public class B {


    public StringBuilder getStringNextValue() {

        StringBuilder str = new StringBuilder();

        str.append(" World");

        System.out.println(str.toString()); // Here i get ' World' -> zp: Yes, 2 times

        return str;

    }

}

我在这里的测试:


import test.A;

import test.B;


@RunWith(SpringRunner.class)

public class MyTest {


    @Configuration

    @ComponentScan("test")

    static class Config {}


    @Autowired

    private A a;


    @Autowired

    private B b;


    @Test

    public void test() {

        a.getStringValue();

    }

}

输出是:


 World

 World

 World

Hello  World


查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信