본문 바로가기
Spring Boot

[Spring Boot] SpringApplication.class

by 코리늬 2019. 12. 25.

본 내용은 백기선님의 스프링부트 개념과 활용 강의를 보고 정리한 내용입니다.

스프링 부트 프로젝트를 생성하여 Application 클래스를 확인해보면 아래와 같은 구조를 확인 할 수 있다.

  • 기존의 어플리케이션 클래스
public static void main(String[] args) {

        SpringApplication.run(InflearnApplication.class, args);
    }

 

하지만 이 구조는 스프링의 다양한 커스텀 기능을 쓰는데 제한적이다.

그래서 아래와 같이 구조를 살짝 바꿔줘야한다.

  • 변경된 어플리케이션 클래스
public static void main(String[] args) {

        SpringApplication app = new SpringApplication(InflearnApplication.class);
        app.run(args);
    }

 

빌더 패턴으로도 작성 가능

public static void main(String[] args) {

        new SpringApplicationBuilder()
                        .sources(SpringinitApplication.class)
                        .run(args);
    }

Application Event와 Listener

이벤트가 ApplicationContext가 만들어 졌느냐 아니냐를 기점으로 이벤트가 호출되냐 안되냐가 나뉜다.

ApplicationContext가 만들어진 다음에 발생하는 이벤트들의 Listener가 Bean이면 알아서 호출된다.

하지만 그렇지 않은 경우 수동으로 등록시켜줘야한다.

public class SampleListener implements ApplicationListener<ApplicationStartingEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {
        System.out.println("========================");
        System.out.println("Application ist starting");
        System.out.println("========================");
    }
}

 

하지만 그 전에 발생한 이벤트ApplicationStartingEvent 같은 경우에는 Bean으로 등록해도 동작하지 않는다.

  • 직접 등록해야한다.
public static void main(String[] args) {
        SpringApplication app = new SpringApplication(InflearnApplication.class);
        app.addListeners(new SampleListener());
        app.run(args);
    }

 

Application이 실행된 후 추가 작업이 필요한 경우

  • implements ApplicationRunner 사용

댓글