[03] Main Application Class

MIIIN·2021년 9월 21일
0

Spring Boot

목록 보기
3/9
post-thumbnail

🌻 Main Application Class

Main Application class는 Spring Boot Application을 실행하는 main 메서드를 호출한다. main 메서드는 애플리케이션의 진입점(entry poing)에 대한 Java 규칙을 따르는 표준 방법이다. main 메서드 안에서 SpringApplication 클래스의 run 메서드를 호출하면 Embedded Tomcat이 실행되고 Spring IoC 컨테이너가 초기화된다.

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

Main Application Class는 다른 클래스들보다 상위 Root Package에 위치시키는 것이 좋다.


🌻 @SpringBootApplication

@SpringBootApplication 어노테이션은 다음과 같은 3가지의 어노테이션 기능들을 포함한다.

  1. @Confiuration
  2. @EnableAutoConfiguration
  3. @ComponentScan
@SpringBootApplication // same as @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

🌻 Configuration Class

Spring Boot는 XML 파일보다 Java 기반으로 구성하는 것을 권장하며, 주로 main 메서드를 정의하는 Main Application Class를 기본 @Configuration Class로 구성한다.

Configuration Class는 다중 클래스로 구성할 수 있으며, 다음 2가지 방법으로 로드할 수 있다.

  1. @Import : 로드할 Configuration Class를 알려준다.
@Import(TestConfig.class)
@Configuration
public class MyConfig {
    ...
}
  1. @ComponentScan : @Configuration 어노테이션을 각 구성 Class에 부여해 컴포넌트 스캔 기능으로 구성을 자동 설정한다.

🌻 자동 구성 (Auto-configuration)

Spring Boot Auto-confiuraion은 Spring 애플리케이션을 classpath에 추가한 jar 라이브러리들을 기반으로 자동적으로 구성해준다. 자동 구성은 @SpringBootApplication이나 @EnableAutoConfiguration 어노테이션을 @Configuration 클래스들 중 하나에 추가하면 사용할 수 있다.

자동 구성은 non-invasive, 개발자가 직접 정의한 구성을 침범하지 않는다. 예를 들어 개발자가 DataSource 빈을 추가한다면, Spring Boot 자동 구성의 기본 Embedded DataBase 지원은 취소된다. 현재 자동구성이 적용된 부분을 볼려면, Spring Application을 --debug 옵션으로 시작하면 된다.

특정 자동 구성 클래스들을 적용하기 원하지 않는다면, "exclude" 속성을 사용할 수 있다.

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class MyApplication {
   ...
}

또한, 설정 파일 내 spring.autoconfigure.exclude 속성으로도 제외 가능하다.


🌻 Spring Bean & Dependency Injection

Spring Bean들과 그것들의 의존성 주입을 정의하기 위해 어떠한 Spring Framework 표준 기술들을 사용해도 상관없지만, @ComponentScan 어노테이션으로 빈들을 찾고 의존성을 연결하기 위해 생성자 주입을 사용하는 것을 추천한다.

@ComponentScan 어노테이션은 모든 애플리케이션 컴포넌트들(@Component, @Service, @Repository, @Controller 등)을 자동적으로 Spring Bean으로 등록한다.

의존성 주입으로는 3가지 방법이 있다.

1) 생성자 주입 (constructor injection)

Spring Bean이 단일 생성자를 가지는 경우, @Autowired 어노테이션이 필요없다. 생성자가 2개 이상인 경우에만 @Autowired 어노테이션을 붙여준다.

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    public MyAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

2) 필드 주입 (field injection)

필드에 @Autowired 어노테이션을 붙여준다.

@Service
public class MyAccountService implements AccountService {

    @Autowired
    private RiskAssessor riskAssessor;

    // ...

}

3) 수정자 주입 (setter injection)

수정자(Setter)에 @Autowired 어노테이션을 붙여준다.

@Service
public class MyAccountService implements AccountService {

    private RiskAssessor riskAssessor;

    @Autowired
    public void setRiskAssessor(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

🍄 계속해서 개발시 유용한 기능을 제공하는 Developer Tools을 살펴보자~

profile
백엔드개발자

0개의 댓글