수색…


소개

이 항목에서는 봄 부팅 패키지 검색에 대해 설명합니다.

다음 링크 (spring -using-boot-structuring-your-code )에서 스프링 부트 문서의 몇 가지 기본 정보를 찾을 수 있지만 더 자세한 정보를 제공하려고 노력할 것입니다.

봄 부팅 및 일반적으로 봄은 특정 주석에 대한 패키지를 자동으로 검색하여 beansconfiguration 을 만드는 기능을 제공 configuration .

매개 변수

주석 세부
@SpringBootApplication 주요 스프링 부팅 응용 프로그램 주석. 응용 프로그램에서 한 번만 사용하고 기본 방법이 포함되어 있으며 패키지 검색의 기본 패키지 역할을합니다.
@SpringBootConfiguration 클래스가 Spring Boot 응용 프로그램을 제공함을 나타냅니다. @SpringBootApplication 을 설정하여 응용 프로그램에서 한 번만 선언해야합니다.
@EnableAutoConfiguration Spring Application Context의 자동 설정을 사용합니다. @SpringBootApplication 을 설정하여 응용 프로그램에서 한 번만 선언해야합니다.
@ComponentScan 특정 패키지 및 하위 패키지에 대한 자동 패키지 검색을 실행하거나 사용자 정의 패키지 검색을 설정하는 데 사용됩니다.
@Configuration 하나 이상의 @Bean 메서드를 선언하는 데 사용됩니다. 전통적인 xml 설정 대신에 하나 이상의 @Bean 메쏘드를 선언하기 위해 자동 패키지 스캐닝에 의해 선택 될 수있다.
@콩 메소드가 Spring 컨테이너에 의해 관리되는 bean을 생성 함을 나타냅니다. 일반적으로 @Bean 어노테이션이 @Bean 메소드는 @Configuration 어노테이션이 @Configuration 클래스에 배치되며 패키지 검색에 의해 선택되어 Java 구성 기반 bean을 작성합니다.
@구성 요소 클래스를 @Component 로 선언하면 어노테이션 기반 구성 및 클래스 경로 검색을 사용할 때 자동 감지의 후보가됩니다. 일반적으로 @Component 주석 된 클래스는 응용 프로그램의 bean 이됩니다.
@저장소 원래 Domain-Driven Design (Evans, 2003)에 의해 "저장소를 캡슐화하기위한 메커니즘"으로 정의되었는데, 이는 일반적으로 spring dataRepository 를 나타내는 데 사용됩니다
@서비스 실제로 @Component 와 매우 비슷합니다. 원래 Domain-Driven Design (Evans, 2003)이 "캡슐화되지 않은 상태로 모델에 단독으로 존재하는 인터페이스로 제공되는 작업"이라고 정의했습니다.
@제어 장치 주석 된 클래스가 "컨트롤러"(예 : 웹 컨트롤러)임을 나타냅니다.
@RestController @Controller@ResponseBody 주석이 달린 편리한 어노테이션. 기본적으로 선택되는 @Controller 어노테이션이 포함되어 있기 때문에 기본적으로 자동으로 선택됩니다.

@SpringBootApplication

좋은 자동 패키지 검색을 위해 스프링 부팅을 사용하여 코드를 구조화하는 가장 기본적인 방법은 @SpringBootApplication 주석을 사용하는 @SpringBootApplication 입니다. 이 주석은 @SpringBootConfiguration , @EnableAutoConfiguration , @ComponentScan ( Parameters 섹션의 각 주석에 대한 자세한 정보)과 같이 자동 스캔에 도움이되는 다른 세 가지 주석을 제공합니다.

@SpringBootApplication@SpringBootApplication 주 패키지에 배치되고 다른 모든 구성 요소는이 파일 아래의 패키지에 배치됩니다.

com
 +- example
     +- myproject
         +- Application.java (annotated with @SpringBootApplication)
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

달리 언급하지 않는 한, 스프링 부트는 스캔 된 패키지 아래에서 @Configuration , @Component , @Repository , @Service , @Controller , @RestController 주석을 자동으로 @RestController 합니다 ( @Configuration@RestController@Component@Controller 로 주석을 달았 기 때문에 선택됩니다). ).

기본 코드 예 :

@SpringBootApplication
public class Application {

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

명시 적으로 패키지 / 클래스 설정

버전 1.3 이후로 당신은 또한 설정하여 특정 패키지를 스캔 스프링 부팅을 알 수 scanBasePackages 또는 scanBasePackageClasses@SpringBootApplication 대신의 지정 @ComponentScan .

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") - com.example.myproject 를 스캔 할 기본 패키지로 설정합니다.
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) - scanBasePackages 대신 type-safe를 사용하면 CustomerController.java 패키지 com.example.myproject.web 을 스캔 할 기본 패키지로 설정합니다.

자동 구성 제외

또 다른 중요한 기능은 exclude 또는 excludeName ( excludeName 은 버전 1.3 이후로 존재)을 사용하여 특정 자동 구성 클래스를 exclude 하는 기능입니다.

  1. @SpringBootApplication(exclude = DemoConfiguration.class) - 자동 패키지 검색에서 DemoConfiguration 을 제외합니다.
  2. @SpringBootApplication(excludeName = "DemoConfiguration") - 완전히 분류 된 클래스를 사용하여 동일하게 수행합니다.

@ComponentScan

보다 복잡한 패키지 검색을 구성하려면 @ComponentScan 을 사용할 수 있습니다. 여러 @ComponentScan 주석을 집계하는 컨테이너 주석으로 작동하는 @ComponentScans 도 있습니다.

기본 코드 예제

@ComponentScan
public class DemoAutoConfiguration {
}

@ComponentScans({@ComponentScan("com.example1"), @ComponentScan("com.example2")})
public class DemoAutoConfiguration {
}

구성없이 @ComponentScan 을 지정하면 @SpringBootApplication 처럼 작동 @SpringBootApplication 주석으로 주석 된 클래스 아래에있는 모든 패키지를 검색합니다.

이 예제에서는 @ComponentScan 의 유용한 속성 중 일부를 설명합니다.

  1. basePackages - 스캔 할 특정 패키지의 상태를 나타내는 데 사용할 수 있습니다.
  2. useDefaultFilters -이 속성을 false (기본값 true)로 설정하면 spring이 @Component , @Repository , @Service 또는 @Controller 자동으로 검사하지 않도록 할 수 있습니다.
  3. includeFilters - 패키지 스캔에 포함 할 특정 스프링 주석 / 정규식 패턴을 포함하는 데 사용할 수 있습니다.
  4. excludeFilters은 - 패키지 검색에 포함 할 특정 스프링 주석 / 정규식 패턴을 제외 할 수 있습니다.

더 많은 특성이 있지만 패키지 검색을 사용자 지정하는 데 가장 많이 사용됩니다.

나만의 자동 구성 만들기

스프링 부트는 미리 만들어진 많은 자동 구성 부모 프로젝트를 기반으로합니다. 스프링 부트 스타터 프로젝트에 이미 익숙해야합니다.

다음과 같은 간단한 단계를 수행하여 자신의 스타터 프로젝트를 쉽게 만들 수 있습니다.

  1. 일부 @Configuration 클래스를 작성하여 기본 bean을 정의하십시오. 사용자 정의가 가능하도록 @AutoConfigureBefore , @AutoConfigureAfter , @ConditionalOnBean , @ConditionalOnMissingBean 등과 같은 자동 구성 도우미 주석을 사용하려면 가능한 한 외부 속성을 사용해야합니다. 공식 문서에서 각 주석에 대한 자세한 정보를 확인할 수 있습니다. 조건 주석
  2. 모든 @Configuration 클래스를 모으는 자동 구성 파일 / 파일을 배치하십시오.
  3. spring.factories 라는 이름의 파일을 만들어 src/main/resources/META-INF .
  4. spring.factories 에서 @Configuration 클래스의 쉼표로 구분 된 값으로 org.springframework.boot.autoconfigure.EnableAutoConfiguration 속성을 설정합니다.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

이 방법을 사용하면 spring-boot에 의해 선택된 자동 구성 클래스를 만들 수 있습니다. Spring-boot는 spring.factories 파일의 모든 maven / gradle 의존성을 자동으로 검사합니다. 발견되면 자동 구성 프로세스에 지정된 모든 @Configuration 클래스를 추가합니다.

auto-configuration 시작 프로젝트가 프로젝트를 실행 가능한 JAR로 패키징하고 클래스 경로에 의해 의도 한대로로드되지 않기 때문에 spring boot maven plugin 포함되어 있지 않은지 확인하십시오. 스프링 부트는 spring.factories 를 찾을 수 없으며 구성을로드하지 않습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow