MessageSource
ApplicationContext에 있는 기능. 국제화 기능을 제공한다.
ApplicatioEventPublisher
ApplicationEvent를 상속받아서 사용하지만 스프링 4.2부터는 상속받지 않아도 이벤트를 사용할 수 있게 되었다.
사용예제
public class MyEvent {
private Object source;
private int data;
public MyEvent(Object source,int data) {
this.source=source;
this.data=data;
}
public Object getSource(){
return source;
}
public int getData(){
return data;
}
}
@Component
public class MyEventHandler {
@EventListener
public void A(MyEvent myEvent) {
System.out.println(Thread.currentThread().toString());
System.out.println("데이터는"+myEvent.getData());
}
}
@Component
public class AnotherHandler {
@EventListener
public void handle(MyEvent myEvent){
System.out.println(Thread.currentThread().toString());
System.out.println("Another"+myEvent.getData());
}
}
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ApplicationEventPublisher publisher;
@Override
public void run(ApplicationArguments args) throws Exception {
publisher.publishEvent(new MyEvent(this,100));
}
}
기본적으로 synchronized이지만 비동기적으로 실행시키고 싶을시 @Async를 붙인다.
기본 이벤트 기능
ContextRefreshedEvent :applicationContext를 초기화 하거나, 리프레쉬를 했을때
ContextStartedEvent: applicationContext를 start()를 하여 라이프사이클 빈들이 시작신호를 받은 시점
ContextStoppedEvent: applicationContext를 stop()하여 라이프사이클 빈들이 정지신호를 받은 시점
ContextClosedEvent:applicationContext를 close()를 사여 싱글톤 빈이 소멸되는 시점
RequestHandleEvent: HTTP 요청을 처리했을때
ResourceLoader
리소스를 읽어오는 기능 제공.
예제
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ResourceLoader resourceLoader;
@Override
public void run(ApplicationArguments args) throws Exception {
Resource resource=resourceLoader.getResource("classpath:test.txt");
System.out.println(resource.exists());
System.out.println(resource.getDescription());
System.out.println(Files.readString(Path.of(resource.getURI()))); //test.txt.내용 출력
}
}
'Web > Spring Boot' 카테고리의 다른 글
ObjectMapper (0) | 2021.05.08 |
---|---|
스프링부트 공부 5일차 (0) | 2020.12.19 |
스프링 공부 3일차 (0) | 2020.12.13 |
스프링부트 공부 2일차 (0) | 2020.12.09 |
스프링부트 공부 1일차 (0) | 2020.12.06 |