6.2.2. 기본 애플리케이션 클래스 찾기

2023. 12. 16. 00:55카테고리 없음

 

6.2.2. 기본 애플리케이션 클래스 찾기

 @SpringBootApplication 주석은 주로 기본 클래스에 배치되며 특정 항목에 대한 기본 "검색 패키지"를 암시적으로 정의한다. 예를 들어, JPA 애플리케이션을 작성하는 경우 @SpringBootApplication 주석이 달린 클래스 패키지는 @Entity 항목을 검색하는 데 사용된다. 루트 패키지를 사용하면 구성 요소 스캔을 프로젝트에만 적용할 수도 있다.

 

 

일반적인 레이아웃

com
 +- 예
     +- 내 애플리케이션
         +- MyApplication.java
         |
         +- 고객
         | +- 고객.java
         | +- CustomerController.java
         | +- CustomerService.java
         | +- CustomerRepository.java
         |
         +- 주문
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderRepository.java

 

@SpringBootApplication
public class MyApplication {

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

}
 

6.3. 구성 클래스

Spring Boot는 Java 기반 구성을 선호한다. XML 소스와 함께 SpringApplication을 사용할 수 있지만 일반적으로 기본 소스는 단일 @Configuration 클래스인 것이 좋다. 일반적으로 main 메소드를 정의하는 클래스가 기본 @Configuration 메소드로 사용하기에 좋다.

 

6.4.2. 특정 자동 구성 클래스 비활성화

원하지 않는 특정 자동 구성 클래스가 적용되고 있는 경우 다음 예와 같이 @SpringBootApplication의 제외 속성을 사용하여 해당 클래스를 비활성화할 수 있다.

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

}
 

 

 
 

6.4.3. 자동 구성 패키지

자동 구성 패키지는 엔터티 및 Spring Data 저장소와 같은 항목을 스캔할 때 다양한 자동 구성 기능이 기본적으로 검색되는 패키지다. @EnableAutoConfiguration 주석(직접 또는 @SpringBootApplication에 있는 주석을 통해)은 기본 자동 구성 패키지를 결정한다. @AutoConfigurationPackage 주석을 사용하여 추가 패키지를 구성할 수 있다.

6.5. 스프링 빈과 의존성 주입

표준 Spring Framework 기술을 자유롭게 사용하여 Bean과 주입된 종속성을 정의할 수 있다. 일반적으로 생성자 주입을 사용하여 종속성을 연결하고 @ComponentScan Bean을 찾는 것이 좋다.

모든 애플리케이션 구성 요소(@Component, @Service, @Repository, @Controller 등) 는 Spring Bean으로 자동 등록된다.

 

다음 예는 필수 Bean을 얻기 위해 생성자 주입을 사용하는 @Service Bean이다.

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

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

    // ...

}
 

빈에 생성자가 두 개 이상 있는 경우 Spring에서 사용할 생성자를 표시해야 한다. @Autowired

생성자 주입을 사용하면 riskAssessor 필드가 final로 표시되어 이후에 변경할 수 없음

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    private final PrintStream out;

    @Autowired
    public MyAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
        this.out = System.out;
    }

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

    // ...

}

 

 

 

 

6.6. @SpringBootApplication 주석 사용

단일 @SpringBootApplication 주석을 사용하면 다음 세 가지 기능을 활성화할 수 있다.

  • @EnableAutoConfiguration: 활성화 Spring Boot의 자동 구성 메커니즘
  • @ComponentScan: 애플리케이션이 있는 패키지에서 @Component 검색을 활성화
  • @SpringBootConfiguration: 컨텍스트에서 추가 Bean 등록 또는 추가 구성 클래스 가져오기를 활성화. 통합 테스트에서 구성 감지를 돕는 Spring 표준 @Configuration의 대안.
// Same as @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
@SpringBootApplication
public class MyApplication {

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

}