"Prototype/프록시"로 설정했는데 동일한 객체로 나옵니다
@Getter
@Component
@Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Prototype {
private final UUID uuid = UUID.randomUUID();
}
@Getter
@Component
@RequiredArgsConstructor
public class Singleton {
private final Prototype prototype;
public void print() {
System.out.println(prototype.getUuid());
System.out.println(prototype.getUuid());
System.out.println(prototype.getUuid());
}
}
Singleton singleton = context.getBean(Singleton.class);
singleton.print();
Prototype p1 = singleton.getPrototype();
Prototype p2 = singleton.getPrototype();
System.out.println(p1);
System.out.println(p2);
System.out.println(p1.getUuid());
System.out.println(p2.getUuid());
System.out.println(p1 == p2);
System.out.println(p1.equals(p2));
System.out.println(new Prototype().equals(new Prototype()));
Singleton bean 안에 class를 target으로 하는 proxy로 prototype의 bean을 필드로 정의했습니다.
근데 singleton 객체에서 prototype 필드를 print하면 메모리 주소는 다르게 나오는데
==, equals 등으로 비교하면 true가 나오는 기이한 현상을 겪고 있습니다. 제 자바 근간이 흔들리고 있어요;
왜 그런 걸까요..?