내가 틀렸을 수도 있지만 Spring이 Singleton 클래스에서 두 개의 다른 객체를 만드는 이유를 알 수 없습니다. 다음은 코드입니다.
public class DbSingleTOn {
private static DbSingleTOn dbSingleTOn = new DbSingleTOn();
private DbSingleTOn() {
}
public static DbSingleTOn getInstance() {
return dbSingleTOn;
}
}
public class MyApp {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext(
"spring-singleton.xml");
DbSingleTOn dbSingleTOn = context.getBean(DbSingleTOn.class);
System.out.println(dbSingleTOn.hashCode());
DbSingleTOn dbSingleTOn1 = context.getBean(DbSingleTOn.class);
System.out.println(dbSingleTOn1.hashCode());
context.registerShutdownHook();
}
}
Output:
18885489
17045421
스프링 구성 XML :
<bean id="bean1" class="com.singleton.DbSingleTOn" scope="prototype" >
</bean>
"prototype"범위를 사용하여 일반 클래스에 대해 다른 개체를 가져올 것으로 예상되지만 "prototype"이 Singleton 클래스에서 2 개의 개체를 만드는 이유는 무엇입니까?
두가지. 첫째, Spring은 클래스가 어떻게 설정되어 있는지 전혀 알지 못합니다 (정말 상관하지 않습니다). 프로그래밍 패턴을 구현했다는 사실은 Spring에 아무런 의미가 없습니다. 둘째, Spring은 리플렉션을 사용하여 선언 한 빈 유형을 인스턴스화하므로 private
생성자를 사용할 수 있습니다 .
Spring에서 프로토 타입 범위 빈을 요청할 때마다 빈의 새 인스턴스를 생성합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다