通过 Spring 在同一上下文中启动创建的对象的两个不同哈希码
Two different hash codes for an object created through Spring Boot in the same context
我已经编写了一个简单的 Spring 引导应用程序,稍后我将对其进行扩展以构建一个 Spring REST 客户端。我有一个工作代码;我正在玩耍以更好地理解这些概念。代码如下。
@SpringBootApplication
public class RestClientApplication {
public static void main(String[] args) {
SpringApplication.run(RestClientApplication.class, args);
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
RestClientApplication.class)) {
System.out.println(" Getting RestTemplate : " + ctx.getBean("restTemplate"));
}
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder.build();
}
@Bean
public CommandLineRunner run(RestTemplate template) {
return args -> {
System.out.println("Rest Template instance from CLR is : " + template);
};
}
}
观察
Rest Template instance from CLR is : org.springframework.web.client.RestTemplate@1e53135d
Getting RestTemplate : org.springframework.web.client.RestTemplate@5aa6202e
问题
我假设哈希码是相同的。这是预期的行为吗?是的,怎么样?
您创建了两个不同的 Spring 上下文:
// first context
SpringApplication.run(RestClientApplication.class, args);
// second context
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
RestClientApplication.class)) {
System.out.println(" Getting RestTemplate : " + ctx.getBean("restTemplate"));
}
所以结果是意料之中的。
我已经编写了一个简单的 Spring 引导应用程序,稍后我将对其进行扩展以构建一个 Spring REST 客户端。我有一个工作代码;我正在玩耍以更好地理解这些概念。代码如下。
@SpringBootApplication
public class RestClientApplication {
public static void main(String[] args) {
SpringApplication.run(RestClientApplication.class, args);
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
RestClientApplication.class)) {
System.out.println(" Getting RestTemplate : " + ctx.getBean("restTemplate"));
}
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder.build();
}
@Bean
public CommandLineRunner run(RestTemplate template) {
return args -> {
System.out.println("Rest Template instance from CLR is : " + template);
};
}
}
观察
Rest Template instance from CLR is : org.springframework.web.client.RestTemplate@1e53135d
Getting RestTemplate : org.springframework.web.client.RestTemplate@5aa6202e
问题 我假设哈希码是相同的。这是预期的行为吗?是的,怎么样?
您创建了两个不同的 Spring 上下文:
// first context
SpringApplication.run(RestClientApplication.class, args);
// second context
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
RestClientApplication.class)) {
System.out.println(" Getting RestTemplate : " + ctx.getBean("restTemplate"));
}
所以结果是意料之中的。