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 |
댓글