spring 为什么作为现场单音分量的自动布线与方法中的自动布线不一样

vu8f3i0k  于 2023-11-16  发布在  Spring
关注(0)|答案(1)|浏览(106)

我遇到了一个奇怪的问题。我有一个简单的组成部分(单声道)

@Component
public class SingletonExample {
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

字符串
和RestController

public class RestController {
    @Autowired
    SingletonExample example;

    @Autowired
    SingletonExample example2;

    @GetMapping("/get_single")
    public String getHash2(@Autowired SingletonExample example3) {
        example.setValue("ABC");
        String value1 = String.format("example hashcode = %s Value = %s", example.hashCode(), example.getValue());
        String value2 = String.format("example2 hashcode = %s Value = %s", example2.hashCode(), example2.getValue());
        String value3 = String.format("example3 hashcode = %s Value = %s", example3.hashCode(), example3.getValue());
        return value1.concat("<br>").concat(value2).concat("<br>").concat(value3);
    }
}


结果
第一个月
example2 hashcode = 1063350459 Value = ABC (okay)
example3 hashcode = 750544796 Value = null (???)
我以为example,example2和example3必须是同一个对象。但实际上我看到只有example和example2(作为Field注入)是相同的,但example3(注入方法)有另一个hashcode和value。在example.setValue(“ABC”)行之后,example3仍然有value=null和hashcode与exaple和example2不同。为什么example3是另一个对象?

hmae6n7t

hmae6n7t1#

如Autowired java文档中所述
自动连线参数
尽管从Spring Framework 5.0开始,@Autowired可以在技术上声明在单个方法或构造函数参数上,但框架的大多数部分都忽略了此类声明。Spring Framework核心中唯一主动支持autowired参数的部分是spring-test模块中的JUnit Jupiter支持(有关详细信息,请参阅TestContext框架参考文档)。

相关问题