我遇到了一个奇怪的问题。我有一个简单的组成部分(单声道)
@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是另一个对象?
1条答案
按热度按时间hmae6n7t1#
如Autowired java文档中所述
自动连线参数
尽管从Spring Framework 5.0开始,@Autowired可以在技术上声明在单个方法或构造函数参数上,但框架的大多数部分都忽略了此类声明。Spring Framework核心中唯一主动支持autowired参数的部分是spring-test模块中的JUnit Jupiter支持(有关详细信息,请参阅TestContext框架参考文档)。