Я создал два bean-компонента, @Signleton
beanA, который имеет @Prototybe
beanB в качестве зависимости. Чтобы убедиться, что каждый раз, когда beanA вызывается, beanB инициализируется снова, я пометил beanB с помощью
Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)
. Чтобы убедиться, что все работает нормально, я сделал тест, который проверяет, что если beanB получен два раза, Это два разных экземпляра:
@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 такие же, как и ожидалось, и имеют одинаковое значение ha sh. Но почему в этом случае, несмотря на то, что хэши beanB различны, равно и == между двумя экземплярами bean-компонента все еще возвращают true?