아주 근본적인(?) spring framework 프로젝트를 볼 일이 생겼다.
Application.java 에서 ApplicationContext를 하나 생성해서 별거 별거 다 쓰고 있길래 궁금해서 대충 정리해봄. 챗사수님과 함께..
소스 코드는 대충 각색해서 정리함..
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씨 착취 당하고 있다면 당근을 흔들어 주세요.
🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕
그래서 소스 코드에서 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;
}
}
}