728x90
반응형
ApplicationEvent
- 다양한 시점의
ApplicationEvent존재 ApplicationContext를 만들기 전에 사용하는 리스너는@Bean으로 등록할 수 없다. 왜냐하면SpringApplication.addListeners()를 통해 해당 리스너를 생성하기 때문이다.
예제
1. ApplicationContext 생성 이전
// SampleListener.java
// ApplicationStartingEvent 사용
public class SampleListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent event) {
System.out.println("==============");
System.out.println("App Starting");
System.out.println("==============");
}
}
// Application.java
// SpringApplication.addListeners() 사용
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.addListeners(new SampleListener());
app.run(args);
}
}
2. ApplicationContext 생성 이후
// SampleListener.java
// ApplicationStartedEvent 사용
// SampleListener Bean 등록
@Component
public class SampleListener implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("===========");
System.out.println("App Started");
System.out.println("===========");
}
}
// Application.java
// SpringApplication.addListeners() 미사용
// 왜냐하면 SampleListener를 Bean으로 등록했기 때문에
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.run(args);
}
}
WebApplicationType
WebApplicationType.NONE: 웹 응용 프로그램으로 실행되지 않아야 하며 내장된 웹 서버를 시작하지 않아야 한다.WebApplicationType.REACTIVE: 반응형 웹 응용 프로그램으로 실행. 내장된 반응형 웹 서버를 시작해야 한다.WebApplicationType.SERVLET: 서블릿 기반 웹 응용 프로그램으로 실행. 내장된 서블릿 웹 서버를 시작해야 한다.Spring Web MVC가 들어있으면SERVLET으로 동작,Spring Web Flux가 들어있다면REACTIVE로 동작. 둘 다 들어있을 경우SERVLET으로 동작
Application Arguments
예제
1. SampleListener.java 생성
// SampleListener.java
@Component
public class SampleListener {
public SampleListener(ApplicationArguments arguments) {
System.out.println("foo : " + arguments.containsOption("foo"));
System.out.println("bar : " + arguments.containsOption("bar"));
}
}
* 어떤 Bean에 생성자가 1개이고, 그 생성자의 파라미터가 Bean일 경우 스프링이 알아서 그 Bean을 주입한다.
2. Application.java 수정
// Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.setWebApplicationType(WebApplicationType.NONE);
app.run(args); // run 함수에 arg 넘겨주어야 결과 확인 가능
}
}
동작 확인


ApplicationRunner
// SampleListener.java
@Component
public class SampleListener implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("foo : " + args.containsOption("foo"));
System.out.println("bar : " + args.containsOption("bar"));
}
}
Command Args 만 true 출력
CommandLineRunner
// SampleListener.java
@Component
public class SampleListener implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
Arrays.stream(args).forEach(System.out::println);
}
}
JVM Option은 출력되지 않는다.
@Order
ApplicationRunner가 여러개 일 경우(Bean 이 여러개 일 경우)@Order를 이용해 순서를 정할 수 있다.- 숫자가 낮을수록 먼저 실행된다.
// SampleListener.java
@Component
@Order(1)
public class SampleListener implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("foo : " + args.containsOption("foo"));
System.out.println("bar : " + args.containsOption("bar"));
}
}728x90
반응형
'Dev > Spring Boot' 카테고리의 다른 글
| [스프링 부트 개념과 활용] 외부 설정 2부 (0) | 2020.08.24 |
|---|---|
| [스프링 부트 개념과 활용] 외부 설정 1부 (0) | 2020.08.21 |
| [스프링 부트 개념과 활용] SpringApplication 1부 (0) | 2020.08.20 |
| [스프링 부트 개념과 활용] 스프링 부트 활용 소개 (0) | 2020.08.20 |
| [스프링 부트 개념과 활용] 독립적으로 실행 가능한 JAR (0) | 2020.08.19 |
댓글