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

我正在构建一个 Spring Boot 应用程序。我将有 2 个服务类 A 和 B,B.getStringNextValue() 返回一个在 A.getStringValue() 中调用的值,但 A.getStringValue() 类中 b.getStringNextValue() 的值没有任何内容/为空。


我已经尝试了下面的代码,还在 StackOverflow 中搜索了一些问题,但没有一个答案解决了这个问题。


@Service

public 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,


@Service

public class B {


    public StringBuilder getStringNextValue() {

        StringBuilder str = new StringBuilder();

        str.append(" World");

        System.out.println(str.toString()); //Here i get ' World'

        return str;

    }

}

我不知道为什么我会得到这种类型的输出。任何人都可以描述它并建议我一些解决方案吗?谢谢。


HUWWW
浏览 98回答 1
1回答

潇湘沐

我测试了你的代码,并没有获得与你相同的打印结果。你如何测试你的代码?这是我的单元测试,在之后的代码中有注释'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;@Servicepublic 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;@Servicepublic 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 WorldHello  World
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java