Application Context

NANA·2024년 5월 27일
0

아주 근본적인(?) spring framework 프로젝트를 볼 일이 생겼다.
Application.java 에서 ApplicationContext를 하나 생성해서 별거 별거 다 쓰고 있길래 궁금해서 대충 정리해봄. 챗사수님과 함께..
소스 코드는 대충 각색해서 정리함..

ApplicationContext

  • 어플리케이션 컴포넌트들을 구성하고 관리하는 중앙 인터페이스
  • Spring IoC 컨테이너의 구현체. bean들을 생성, 구성, 관리. 어플리케이션의 생명주기를 조절
  • 설정 파일(XML, 설정 클래스, 어노테이션 등)을 읽어 빈 정의를 로드하고 빈들을 인스턴스화하고 의존성을 주입한다.
package org.springframework.context;

import org.springframework.beans.factory.HierarchicalBeanFactory;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.core.env.EnvironmentCapable;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.lang.Nullable;

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
    @Nullable
    String getId(); // 어플리케이션 컨텍스트의 고유 ID 반환

    String getApplicationName(); // 어플리케이션의 이름 반환

    String getDisplayName(); // 어플리케이션 컨텍스트의 표시 이름 반환

    long getStartupDate(); // 이 컨텍스트가 시작된 시점을 타임스탬프 형식으로 반환

    @Nullable
    ApplicationContext getParent();

    AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
}
ApplicationContext의 주요 기능
  1. 빈 관리: 빈을 생성, 구성, 관리.
  2. 의존성 주입: 빈 간의 의존성을 설정하고 주입.
  3. 리소스 로딩: 파일, 클래스패스, URL 등에서 리소스를 로딩.
  4. 이벤트 발행: 애플리케이션 이벤트를 발행하고, 리스너를 통해 이벤트를 처리.
  5. 메시지 소스: 다국어 지원을 위한 메시지 처리.

이걸.. 얘가 다하는게 맞아? 착취 아냐..?
상속 받은 클래스들의 업무를 대부분 하는 모양인데..(당연함)
ApplicationContext씨 착취 당하고 있다면 당근을 흔들어 주세요.
🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕

그래서 소스 코드에서 ApplicationContext를 어떻게 착취하고 있느냐..

public class Application {
	private ApplicationContext context;
    
    // xml 설정 정보 읽어옴, Application bean 생성
    public static void main(String[] args) {
    //ClassPathXmlApplicationContext는 ApplicationContext 인터페이스의 구현체
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:" + (args.length == 0  ? "application.xml": args[0]));
		Application app = context.getBean(Application.class);
		if (app == null) {
			log.error("Not defined Applicaiton bean");
		} else {
			app.pubevent(context);
		}
	}
    
    // 이런 식으로 이벤트를 몇 개 발행 중
        public void pubevent(ApplicationContext ctx) {
		this.context = ctx;
		try {
			// 컨텍스트 정보를 받아 커스텀 이벤트 생성
			context.publishEvent(new ServiceInitEvent(ctx));
		} catch (Exception e) {
			log.error("Service init error", e);
			return;
		}
     }
}
profile
기술블로그 그런 거창한 거 아닙니다. 일기에요 일기

0개의 댓글