当前位置: 首页 > 知识库问答 >
问题:

Spring作用域的原型bean实例等于

郎永福
2023-03-14
Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)
@Test()
void testBean() throws IllegalAccessException {

    Field beanBField = ReflectionUtils.findField(BeanA.class, "beanB");
    ReflectionUtils.makeAccessible(beanBField);

    BeanA beanA1 = applicationContext.getBean(BeanA.class);
    System.out.println(beanA1); // my.package.BeanA@4b41e4dd
    BeanB beanB1 = (PMToJupiterMapper) beanBField.get(beanA1);
    System.out.println(beanB1); // my.package.BeanB@42463763

    BeanA beanA2 = applicationContext.getBean(BeanA.class);
    System.out.println(beanA2); // my.package.BeanA@4b41e4dd
    BeanB beanB2 = (PMToJupiterMapper) beanBField.get(beanA2);
    System.out.println(beanB2); // my.package.BeanB@59f63e24

    assertEquals(beanA1, beanA2); // Is OK as expected
    System.out.println(beanB1.equals(beanB2)); // WHY IS TRUE?
    System.out.println(beanB1 == beanB2);// WHY IS TRUE?
}

beanA实例与预期的一样,具有相同的哈希。但是,为什么在这种情况下,尽管beanB哈希值不同,但一个bean的两个实例之间的equals和==仍然返回true?

共有1个答案

卫甫
2023-03-14

我想它们一定是相等的春豆是单人

这里有个定义

singleton范围:Spring IoC容器只创建由该bean定义定义的对象的一个实例。这个实例存储在这样的单例bean的缓存中,所有后续的请求和对命名bean的引用都返回缓存的对象。

 类似资料:
  • 假设有两个类ClassA和ClassB。假设ClassB依赖于ClassA。在配置文件中,如果我们将ClassA的作用域定义为singleton,而将ClassB的作用域定义为Prototype,那么每次创建ClassA的bean实例时ClassB的实例会发生什么?每次返回ClassA实例时,会返回相同的ClassB实例还是创建新实例? 谢谢!!!

  • 大家好,我想了解Spring IOC中原型作用域的工作原理。 对于原型bean,我试图通过: 1来理解。读了一遍又一遍,但不能完全理解(https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory-scopes-other-injection) 2。试着通过源代码调试,只明

  • 问题内容: 我是spring框架的新手,从一些教程开始学习它。 我有以下文件, #MainProgram.java #HelloSpring.java #Bean.xml 当我把 我的输出是: 当我把 我的输出是: 方法是用作用域bean 调用的,但不能 在以下方面为我提供帮助, 这样对吗?如果是这样,可能是什么原因? 我也有一些疑问, 之间的区别或关系是什么 问题答案: 用singleton范围

  • Spring具有bean类型/作用域,如 -singleton bean(每个应用程序上下文只有一个bean), -prototype bean(每个请求一个新bean) 现在,如果在单例bean中有对原型bean的引用,是否有办法在对单例bean的每个请求中获得一个新的原型bean(在单例bean中)。< br >如果是,配置会是什么样的?

  • 我有一个Spring应用程序,我正在使用Vaadin编写Web UI。为此,我使用Spring Vaadin集成工具。 所以我扩展了Vaadin类来定制和使用它们。例如,我有一个主UI类,它是一个原型。(应为用户打开的每个浏览器窗口实例化一个新窗口。) 这导入了我的GameMapView,它也是一个原型组件,并扩展了VerticalLayout,然后我有了一个GameMap原型组件,它扩展了Gri

  • 主要内容:singleton,prototype默认情况下,所有的 Spring Bean 都是单例的,也就是说在整个 Spring 应用中, Bean 的实例只有一个。 我们可以在 <bean> 元素中添加 scope 属性来配置 Spring Bean 的作用范围。例如,如果每次获取 Bean 时,都需要一个新的 Bean 实例,那么应该将 Bean 的 scope 属性定义为 prototype,如果 Spring 需要每次都返回一个相同