1. IOC 용기 디자인 과 구현
1 BeanFactory
1.1 BeanFactory 의 응용 장면
BeanFactory 인터페이스의 첫 줄 에 이런 코드 가 있어 요.
<span style="font-size:18px;">String FACTORY_BEAN_PREFIX = "&";</span>
이것 은 용 기 를 통 해 Factory Bean 을 가 져 오 는 대상 과 Factory Bean 자 체 를 구분 하 는 전의 문자 '&' 를 정의 합 니 다.예 를 들 어 my Factory 는 Factory Bean 이 라면 '& my Factory' 를 사용 하여 얻 은 것 은 Factory Bean 이지 my Factory 가 발생 하 는 대상 이 아니다.
이 BeanFactory 인터페이스 에서 다음 과 같은 방법 을 정의 합 니 다.
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
<span style="font-size:18px;">boolean containsBean(String name);</span>
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException;
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
1.2 BeanFactory 용기 의 설계 원리
XMLbean Factory 는 BeanFactory 의 가장 간단 하고 자주 사용 하 는 실현 류 이다.
public class XmlBeanFactory extends DefaultListableBeanFactory {
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
/**
* Create a new XmlBeanFactory with the given resource,
* which must be parsable using DOM.
* @param resource XML resource to load bean definitions from
* @throws BeansException in case of loading or parsing errors
*/
public XmlBeanFactory(Resource resource) throws BeansException {
this(resource, null);
}
/**
* Create a new XmlBeanFactory with the given input stream,
* which must be parsable using DOM.
* @param resource XML resource to load bean definitions from
* @param parentBeanFactory parent bean factory
* @throws BeansException in case of loading or parsing errors
*/
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
super(parentBeanFactory);
this.reader.loadBeanDefinitions(resource);
}
}
이 는 Default Listable BeanFactory 와 같은 종 류 를 계승 합 니 다. Spring 에 서 는 실제 Default Listable BeanFactory 를 기본 기능 의 완전한 IoC 용기 로 사용 합 니 다.XmlBeanFactory 는 Default Listable BeanFactory 용기 의 기능 을 계승 하 는 동시에 새로운 기능 을 추가 했다. 그것 은 XML 파일 을 분석 하여 BeanFactory 를 초기 화 하 는 것 이다.
소스 코드 를 통 해 알 수 있 듯 이 XMLbean Factory 의 구 조 는 BeanDefinition 의 소스 를 지정 해 야 합 니 다. 이것 은 Resouce 의 패키지 에서 기원 되 었 습 니 다.이렇게 하면 IOC 용 기 는 BeanDefinition 을 이용 하여 용기 의 초기 화 와 주입 과정 에 의존 할 수 있다.
실제로 전체 BeanFactory 의 구축 과정 은 다음 과 같은 몇 단계 로 이 루어 집 니 다.
(1) BeanDefinition 의 원본 을 지정 합 니 다. 여 기 는 Resouce 류 를 사용 합 니 다.
(2) IOC 용 기 를 정의 합 니 다. 즉, XMLbean Factory 는 Default Listable Bean Factory 라 고 할 수 있 습 니 다. 이때 이 용 기 는 비어 있 고 안에 아무것도 없습니다.
(3) BeanDefinition 과 IOC 용기 사이 에 관 계 를 맺 어야 합 니 다. XMLBeanFactory 에서 사용 하 는 것 은 XmlBeanDefinitionReader 입 니 다. IOC 용기 설정 이 완료 되 고 이 때 IOC 용기 가 완 성 됩 니 다.
Bean Factory 초기 화 할 때 모든 Bean 을 초기 화하 지 않 고 getBean 초기 화 합 니 다.
2 ApplicationContext
이것 은 BeanFactory 의 계승 시스템 에서 중간 위치 에 있 는 인터페이스 로 BeanFactory 를 바탕 으로 더욱 고 급 스 러 운 기능 을 제공 합 니 다.
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver
Application Context 의 상용 실현 클래스 는 ClassPathXmlApplication Context, FileSystemXmlApplication Context 와 AnnotationConfigApplication Context 이 며, 웹 에서 Spring 용 기 를 사용 하면 보통 XmlWebApplication Context 와 AnnotationConfigWebApplication Context 두 가지 실현 클래스 가 있다.
응용 프로그램 Context 가 초기 화 될 때, 기본 값 은 모든 sigletonBean 을 미리 초기 화 합 니 다.이것 은 시스템 에서 응용 프로그램 Context 를 만 들 때 비교적 큰 비용 이 들 었 다 는 것 을 의미한다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.