[F-Lab 모각코 챌린지] 26일차 - Spring ApplicationContext
F-Lab 모각코 챌린지 26 일차 - 토비의 스프링 책을 공부하며 얻은 인사이트를 정리했습니다.
![[F-Lab 모각코 챌린지] 26일차 - Spring ApplicationContext](/content/images/size/w1200/2023/06/-------_--------_-------20.png)
Spring IoC
ApplicationContext
Spring framework 에서 오브젝트의 생성과 관계설정, 사용, 제거를 제공하는 독립된 컨테이너
- 우리가 직접 new 키워드를 사용하지 않아도 설정 정보를 바탕으로 생성을 알아서 해준다
Spring 의 IoC 컨테이너는 일반적으로 ApplicationContext 를 말함
(ApplicationContext 는 BeanFactory 의 하위 인터페이스를 구현하고 있으므로)
IoC 컨테이너를 자바 애플리케이션 에서 사용하기 위해서는 ApplicationContext 의 구현체를 사용하면 된다
- ClassPathXmlApplicationContext
클래스패스(classpath) 상에 위치한 XML 파일에서 빈 정의를 읽어와 컨테이너를 생성한다. - FileSystemXmlApplicationContext
파일 시스템에서 지정된 경로에 위치한 XML 파일에서 빈 정의를 읽어와 컨테이너를 생성한다. - AnnotationConfigApplicationContext
자바 어노테이션 기반의 설정 정보를 사용하여 빈 정의를 읽어와 컨테이너를 생성한다. - GenericApplicationContext
단일 내부 DefaultListableBeanFactory 인스턴스를 보유하고 있으며, 특정 bean 정의 형식을 가정하지 않는 일반 ApplicationContext 구현. Bean 정의 리더를 적용할 수 있도록 BeanDefinitionRegistry 인터페이스를 생성자로 받는다. - StaticApplicationContext
외부 구성 소스에서 bean 정의를 읽는 대신 bean 및 메시지의 프로그래밍 방식 등록을 지원하는 ApplicationContext 구현. 주로 테스트에 유용하다.
BeanDefinition
IoC 에서 관리하는 Object 는 bean 이라고 부르는데,
설정에 필요한 메타 정보는 BeanDefinition 라고 하며 인터페이스로 표현되는 추상 정보이다.
BeanDefinition 의 메타 정보를 담은 Object 를 사용 하여 IoC 와 DI 를 수행한다
아래는 BeanDefinition 인터페이스의 간단한 내부 구현
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {
String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;
String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;
int ROLE_APPLICATION = 0;
int ROLE_SUPPORT = 1;
int ROLE_INFRASTRUCTURE = 2;
...
}
SCOPE_SINGLETON
싱글톤 범위를 나타내는 상수
싱글톤으로 설정 될 경우 한 개의 인스턴스만 생성되고 공유된다SCOPE_PROTOTYPE
프로토타입 범위를 나타내는 상수
프로토타입으로 설정 될 경우 매번 요청할 때마다 새로운 인스턴스가 생성된다ROLE_APPLICATION
애플리케이션 역할을 나타내는 상수
주요 애플리케이션 구성 요소로서 사용된다ROLE_SUPPORT
지원 역할을 나타내는 상수
주로 애플리케이션 역할을 지원하는 데 사용ROLE_INFRASTRUCTURE
인프라스트럭처 역할을 나타내는 상수
스프링 프레임워크의 내부 구조에 사용되는 빈들을 지정 한다
Method 목록
이러한 메소드 들은 실제 BeanDefinition 을 구현 하거나 사용 할 때 요긴하게 참고할 수 있는 목록 이므로 첨부한다.
String parentName (setter/getter)
빈이 상속하는 부모 빈의 이름을 조작한다.String beanClassName (setter/getter)
빈의 클래스 이름을 조작한다.
빈의 이름은 빈을 생성할 때 해당 setter 메서드를 이용하여 생성된다String factoryBeanName (setter/getter)
팩토리 빈의 이름을 조작한다.
팩토리 빈을 통해 빈을 생성하는 경우 사용된다.
팩토리 빈은, 빈의 구조에 따라 다른 팩토리 빈을 사용할 수 있다.String factoryMethodName (setter/getter)
팩토리 메서드의 이름을 조작한다
위의 factoryBeanName 의 setter 를 통해 지정 된 팩토리 빈을 통해 빈을 생성하는 경우 사용된다String scope (setter/getter)
빈의 스코프를 조작한다. (singleton
,prototype
)boolean isSingleton()
빈의 싱글톤 여부를 반환한다.boolean isPrototype()
빈의 프로토타입 여부를 반환한다.boolean isAbstract()
빈이 추상적인지 여부를 반환한다. 추상 빈은 직접 인스턴스화되지 않는다.int getRole()
빈의 역할을 반환한다. (ROLE_APPLICATION
,ROLE_SUPPORT
,ROLE_INFRASTRUCTURE
)boolean lazyInit (setter/getter)
빈의 지연 초기화 여부를 조작한다.