스프링은 프로토 타입 패턴을 사용하지 않으므로 반사를 사용합니다. 또한 clone()을 사용하려면 clone()이 보호되므로 clone()도 사용하지 않으므로 어떻게 든 bean을 서브 클래스해야합니다. 그래서
public Object instantiate(RootBeanDefinition beanDefinition, String beanName, BeanFactory owner) {
if (beanDefinition.getMethodOverrides().isEmpty()) {
Constructor<?> constructorToUse;
synchronized (beanDefinition.constructorArgumentLock) {
constructorToUse = (Constructor<?>) beanDefinition.resolvedConstructorOrFactoryMethod;
...
constructorToUse = clazz.getDeclaredConstructor((Class[]) null);
...
}
...
}
...
}
용어 : 여기
는 java.lang.reflect.Constructor의와 java.lang.Class의 반사 방법의 사용을 볼 수 있습니다
org.springframework.beans.factory.support.SimpleInstantiationStrategy
에서 코드 조각입니다 프로토 타입은 getBean을 호출 할 때마다 동일한 속성을 가진 새 인스턴스를 가져 오도록 제안하는 데 사용됩니다. 이것은 생성자에 대한 간단한 호출 이상의 의미를 가지지 만, 모든 종속성이 설정된 bean과 다른 속성이 설정된 bean을 얻게되므로 어떤 의미에서는 프로토 타입이됩니다. 또는 적어도 그것은 개념을 매우 잘 맞 춥니 다.
나는이 두 개의 질문으로 요청을받은 것을 말함으로써 시작합니다. 당신의 1 세대를 위해 나는 [소스 코드]에 파고하지 않은 (https://github.com/spring-projects/spring-framework)하지만, 실제로 프로토 타입 패턴을 활용 않으면 나는 매우 놀랄 것입니다. 두 번째 후 질문의 경우 : http://en.wikipedia.org/wiki/Prototype_pattern#Java_Example – Floegipoky