spring-boot
패키지 스캐닝
수색…
소개
이 항목에서는 봄 부팅 패키지 검색에 대해 설명합니다.
다음 링크 (spring -using-boot-structuring-your-code )에서 스프링 부트 문서의 몇 가지 기본 정보를 찾을 수 있지만 더 자세한 정보를 제공하려고 노력할 것입니다.
봄 부팅 및 일반적으로 봄은 특정 주석에 대한 패키지를 자동으로 검색하여 beans
및 configuration
을 만드는 기능을 제공 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 data 용 Repository 를 나타내는 데 사용됩니다 |
@서비스 | 실제로 @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
.
-
@SpringBootApplication(scanBasePackages = "com.example.myproject")
-com.example.myproject
를 스캔 할 기본 패키지로 설정합니다. -
@SpringBootApplication(scanBasePackageClasses = CustomerController.class)
-scanBasePackages
대신 type-safe를 사용하면CustomerController.java
패키지com.example.myproject.web
을 스캔 할 기본 패키지로 설정합니다.
자동 구성 제외
또 다른 중요한 기능은 exclude
또는 excludeName
( excludeName
은 버전 1.3 이후로 존재)을 사용하여 특정 자동 구성 클래스를 exclude
하는 기능입니다.
-
@SpringBootApplication(exclude = DemoConfiguration.class)
- 자동 패키지 검색에서DemoConfiguration
을 제외합니다. -
@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
의 유용한 속성 중 일부를 설명합니다.
- basePackages - 스캔 할 특정 패키지의 상태를 나타내는 데 사용할 수 있습니다.
- useDefaultFilters -이 속성을 false (기본값 true)로 설정하면 spring이
@Component
,@Repository
,@Service
또는@Controller
자동으로 검사하지 않도록 할 수 있습니다. - includeFilters - 패키지 스캔에 포함 할 특정 스프링 주석 / 정규식 패턴을 포함하는 데 사용할 수 있습니다.
- excludeFilters은 - 패키지 검색에 포함 할 특정 스프링 주석 / 정규식 패턴을 제외 할 수 있습니다.
더 많은 특성이 있지만 패키지 검색을 사용자 지정하는 데 가장 많이 사용됩니다.
나만의 자동 구성 만들기
스프링 부트는 미리 만들어진 많은 자동 구성 부모 프로젝트를 기반으로합니다. 스프링 부트 스타터 프로젝트에 이미 익숙해야합니다.
다음과 같은 간단한 단계를 수행하여 자신의 스타터 프로젝트를 쉽게 만들 수 있습니다.
- 일부
@Configuration
클래스를 작성하여 기본 bean을 정의하십시오. 사용자 정의가 가능하도록@AutoConfigureBefore
,@AutoConfigureAfter
,@ConditionalOnBean
,@ConditionalOnMissingBean
등과 같은 자동 구성 도우미 주석을 사용하려면 가능한 한 외부 속성을 사용해야합니다. 공식 문서에서 각 주석에 대한 자세한 정보를 확인할 수 있습니다. 조건 주석 - 모든
@Configuration
클래스를 모으는 자동 구성 파일 / 파일을 배치하십시오. -
spring.factories
라는 이름의 파일을 만들어src/main/resources/META-INF
. -
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
를 찾을 수 없으며 구성을로드하지 않습니다.