yoncho`s blog
[Spring MVC] ApplicationContext에 Dynamic Bean Create 본문
[Spring MVC] ApplicationContext에 Dynamic Bean Create
욘초 2023. 10. 10. 20:41조건 :
1) Spring Container가 생성되는 시점을 event listener로 Catch해서 동적으로 Bean 생성
2) Bean은 BlogVo(Class)로 생성된 blog 라는 이름으로 등록
작업 순서 :
1) EventListener 생성 및 이벤트 핸들러 작업
2) EventListener를 applicationContext.xml (root-context.xml)에 등록
1. Event Listener 생성
(1) ApplicationListener Interface를 구현해야함.
public class SpringContextEventListener implements ApplicationListener<ContextRefreshedEvent>
ApplicationListener<T> : 환경 또는 ApplicationContext가 사용 가능하기 전이나 ApplicationListener가 등록된 후
SpringApplication이 시작되자마자 발생하는 이벤트
*T : ContextRefreshedEvent / ApplicationStartedEvent / etc..ContextRefreshedEvent : SpringContext가 refresh된 경우 event catch
(2) @Override onApplicationEvent 함수
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
//event 발생 시 실행해야할 코드..
}
event가 발생했을 때 실행되는 함수
(3) 이벤트 발생 시 실행할 코드
if (event.getApplicationContext().getParent() != null) {
System.out.println("SpringContext Refreshed [sub]");
ConfigurableApplicationContext applicationContext = (ConfigurableApplicationContext) event.getApplicationContext();
BlogVo blog = new BlogVo();
applicationContext.getBeanFactory().registerSingleton("blog", blog);
}else {
System.out.println("SpringContext Refreshed [root]");
}
Spring Container가 refresh되는 경우는 두 가지임.
1) SpringContainer (root) - Repository & Service
2) SpringContainer - Controller
여기서 SpringContainer (root가 아닌 경우)가 refresh된 경우일 때 (물론 start된 경우로 event class를 변경해도 상관없음)
bean을 applicationContext에 singleton으로 등록함.
이때 등록하는 blog 는 빈 BlogVo 객체임.
2. Event Listener 를 ApplicationContext에 등록
(1) bean 등록
<bean class="com.*******.jblog.event.SpringContextEventListener" />
applicationContext.xml (root-context) 혹은 spring-servlet.xml (servlet-context)에 등록
'기술, 나의 공부를 공유합니다. > [Web][BE] JAVA' 카테고리의 다른 글
[Spring Configuration] 설정 파일 변화 ( .xml -> .java -> .yml ) (0) | 2023.10.14 |
---|---|
[Plugin Setting & Jenkins Build] 배포 준비 과정 (0) | 2023.10.11 |
[Spring MVC] Global Exception Handler (@ControllerAdvice, @ExceptionHandler) (1) | 2023.10.10 |
CentOS7 ip 변경 (0) | 2023.10.07 |
[Spring Framework] Work Flow (0) | 2023.10.06 |