spring 지식 정리 (3): spring ioc 등록 과정
BeanDefinitionRegistry
의 registerBeanDefinition
방법 을 호출 할 것 이라는 것 을 알 수 있 고 DefaultListableBeanFactory
은 하나의 BeanDefinitionRegistry
이자 하나의 BeanFactory
등록 과정 에서 Bean 의 생 성과 밀접 한 관 계 를 가 진 다 는 것 을 알 수 있다.예 를 고치다
하나 추가
BeanDefinition
package beldon.learn.ioc.sample;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
public class BeanRegistryApplication {
public static void main(String[] args) throws Exception{
BeanDefinition beanDefinition = BeanDefinitionReaderUtils.createBeanDefinition(null, SimpleBean.class.getName(), BeanRegistryApplication.class.getClassLoader());
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.registerBeanDefinition("simpleBean", beanDefinition);
System.out.println(beanFactory.containsBean("simpleBean"));
SimpleBean bean = beanFactory.getBean(SimpleBean.class);
System.out.println(bean);
}
}
실행 결과:
true
beldon.learn.ioc.sample.SimpleBean@6ed3ef1
위의 코드 는
BeanRegistryApplication
의 로드 과정 을 제거 하고 하나의 BeanDefinition
를 직접 사용자 정의 하여 BeanDefinition
등록 시 켰 으 며 최종 용 기 는 정상적으로 작 동 할 수 있 습 니 다.bean 의 등록 과정 을 알 고 싶다 면
BeanDefinitionRegistry
의 DefaultListableBeanFactory
방법 집행 과정 을 알 아 봐 야 한다.소스 코드 추적
public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
throws BeanDefinitionStoreException {
// hide code
if (hasBeanCreationStarted()) {
//... hide code
}
else {
// Still in startup registration phase
this.beanDefinitionMap.put(beanName, beanDefinition);
this.beanDefinitionNames.add(beanName);
this.manualSingletonNames.remove(beanName);
}
this.frozenBeanDefinitionNames = null;
}
}
따라 가기
registerBeanDefinition
가장 핵심 적 인 코드 는 this.beanDefinitionMap.put(beanName, beanDefinition);
this.beanDefinitionNames.add(beanName);
맞습니다. spring 은
registerBeanDefinition
을 map 에 캐 시 한 것 입 니 다. 그리고 이 map 는 BeanDefinition
입 니 다.총결산
위의 코드 를 통 해 알 수 있 듯 이
ConcurrentHashMap
의 등록 과정 은 사실은 이 를 Map 에 캐 시 하 는 것 이다.이것 은 저장 BeanDefinition
에 불과 합 니 다. 대상 을 언제 초기 화 합 니까?위 코드 에
BeanDefinition
방법 이 있다 는 것 을 잊 지 마 세 요.모든 일 은 동풍 만 있 고 자, 집행 하 는 방법 getBean
을 갖 추고 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.