在同一上下文中通过 Spring Boot 创建的对象的两个不同哈希码

Posted

技术标签:

【中文标题】在同一上下文中通过 Spring Boot 创建的对象的两个不同哈希码【英文标题】:Two different hash codes for an object created through Spring Boot in the same context 【发布时间】:2018-08-30 13:36:55 【问题描述】:

我编写了一个简单的 Spring Boot 应用程序,稍后我将对其进行扩展以构建一个 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

问题 我假设哈希码是相同的。这是预期的行为吗?是的,怎么样?

【问题讨论】:

【参考方案1】:

您创建了两个不同的 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"));

所以结果是预期的。

【讨论】:

我正要写同样的答案:) +1 @davidxxx 傻我。我想我现在需要休息一下。大量的教程和示例让你大开眼界。谢谢。 @Sara Spring 和 Spring Boot 有很多不同的方式可以做事。所以混合一点可能会发生一些事情。欢迎你:)

以上是关于在同一上下文中通过 Spring Boot 创建的对象的两个不同哈希码的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 上下文中的 Jooq CastException 已刷新

在 spring-boot 项目中使用 spring mvc xml 项目

Spring Boot在servlet上下文之外获取应用程序基本url

Spring Boot 测试不启动上下文或加载依赖项

如何调试,为啥 Spring Boot 集成测试上下文没有在测试之间重用?

在 Spring Boot 中使用多个调度程序 Servlet/Web 上下文