본문 바로가기

Java/Spring Framework

ApplicationEventPublisher & ResourceLoader

반응형

ApplicationEventPublisher

ApplicationEventPublisher 는 이벤트 프로그래밍에 필요한 인터페이스를 제공하며 옵저버 패턴의 구현체입니다.

이벤트를 발생시킬 수 있는 기능을 ApplicationContext 가 가지고 있습니다.

 

Spring 4.2 이전에는 Event는 Application Event 를 상속받아야하고 Event Handler는 Bean으로 등록 후 ApplicationListener를 구현해서 사용해야 했습니다.

이를 통해 전달받은 이벤트를 가지고 원하는 작업을 수행할 수 있습니다.

 

4.2 이후부터는 Event는 Application Event를 상속받지 않아도 됩니다.

event

Spring Framework가 추구하는 것은 비침투성입니다. spring framework 패키지가 POJO안으로 들어가지 않는것입니다.

이런식으로 Event 를 작성하게되면 springframework와 관련된 어떤것도 없이 깔끔~하게 class를 만들 수 있습니다.

 

Handler도 더이상 ApplicationListener를 구현하지 않아도 됩니다. Bean으로는 등록해야합니다. 

그리고 이벤트를 처리할 메소드 위에 @EventListener라는 annotation을 달아주면됩니다.

Handler

 

Spring 이 기본적으로 제공하는 Event 가 있는데 이를 처리하기 위한 핸들러는 ContextRefresedEvent, ContextClosedEvent 이렇게 있습니다. (위 그림 참고)

 

하나의 이벤트를 여러 핸들러가 다룰경우, 해당 이벤트가 발생하면 핸들러가 순차적으로 실행됩니다. 

두 핸들러는 같은 Thread 안에서 순차적으로 실행되며 순서가 중요한 경우 @Order 를 사용합니다.

@Ordered(Order.HIGHEST_PRECEDENCE)

 

비동기적으로 실행하고 싶은 경우에는 @Async를 사용한 후 main 함수가 있는 클래스에 @EnableAsync를 사용하면 됩니다.

 

ResourceLoader

ResourceLoader 는 리소스를 읽어오는 기능을 제공하는 인터페이스입니다.

ApplicationContext 는 이를 상속받았기 때문에 ResourceLoader 를 사용할 수 있습니다.

ResourceLoader

 

getResource라는 메소드를 통해 사용할 수 있는데 파라미터로 줘야하는 string이 중요합니다.

리소스를 읽어올 때에는 classpath를 통해서, 파일시스템에서, URL 에서, 상대/절대 경로를 통해서 읽어올 수 있습니다.

반응형

'Java > Spring Framework' 카테고리의 다른 글

Resource  (0) 2021.02.04
MessageSource  (0) 2021.02.03
Environment  (0) 2020.10.24
Scope  (0) 2020.10.19
Autowired & Component  (0) 2020.10.18