스프링 부트를 사용하여 내 나머지 Api 호출을 보내고 있습니다. 스프링 부트가 모든 구성을 단계적으로로드하는 방법을 알고 싶습니다. 구성을로드하는 동안 프로세스가 어떤 것인지, 순서가 어떻게 달라지는지를 확인할 수 있습니다. Spring 보안, db 설정 및 bean 초기화 (모두 초기화 됨)로드되는 방식. 그리고 스프링 부트가 우선 순위 (순서)를 찾는 방법. 먼저로드되어야하며 다음에 있어야합니다.스프링 부츠 작동 원리, 모든 구성로드 방법
답변
스프링 부트의 자동 구성 메커니즘에 따라 콩을로드하면로드 할 Configuration 클래스의 정규화 된 이름을 포함하는 jar 파일의 META-INF
폴더에 spring.factories
파일이 있습니다.
스프링 부트가 그와 같은 파일을 찾으면, 컨피규레이션을 빈으로로드 할 것이고, 컨피규레이션은 대개 다른 빈을로드한다.
다른 방법으로 구성을로드 할 수 있습니다. 단지 @Import
을 입력하는 것만으로도 그 중 일부는 작동합니다 (예 : @EnableMetrics
).
일반적으로 스타터라고하는 자동 구성 메커니즘이 포함 된 Jar 파일입니다.
스프링에 의해 픽업되는 특수한 Bean들도 있습니다. 예를 들어 필터로 변환 될 FilterDefinitionBean이나 시작 후 실행될 CommandLineRunner가 있습니다. 봄 부팅이 자동으로 이러한 의존성에 기초를 초기화하는 올바른 순서를 감지하기 때문에
일반적으로 당신이 선발의 순서에 대해 너무 많이 걱정하지 않아도 @DependsOn
주석 콩.
스프링 부트 스타터 자동 구성은 빈이 이미 정의 된 후에 발생하므로 폴백 옵션을 정의하지 않은 경우에만 폴백 백을 제공 할 수 있습니다. 당신이 @ConditionalOnBean
이있을 때
하지만 가끔은, 특히 당신이 명시 적으로 순서를 정의해야이이 자동 초기화해야하는 위치를 정의하는 @AutoConfigureBefore
및 @AutoConfigureAfter
주석하여 수행 할 수 있습니다.
또 다른 주석 @AutoConfigureOrder
은 @Order
주석의 스프링 부트와 동일하므로 순서를 변경하는 데 사용할 수 있습니다 (@Order는 자동 구성에서 작동하지 않으므로).
좋아하는 시작 코드의 소스 코드를 확인하면 이러한 주문 변경 주석이 종종 클래스에 추가되는 것을 볼 수 있습니다.
'@Order (int value)'는로드 순서를 정의합니다. 가장 낮은 값. 가장 먼저로드됩니다. 이런 유형의 질문을하기 전에 먼저 설명서를 읽어야합니다. 의사가 무엇인가를 이해할 수 없다면 이해할 수없는 부분이나 부분을 물어볼 수 있습니다. –