Spring Boot에서의 설정 순서
.@Configuration
는 기본적으로 SpringBoot에 의해 생성된 콩을 덮어쓰는 경향이 있습니다.저는 ZuulConfigs와 같은 것을 위해 콩을 만드는 프로젝트를 진행하고 있으며, 그 프로젝트에서는 기본 생성 콩보다 우리가 만드는 것이 우선시된다는 가정 하에 있습니다.나는 이것을 알아내려고 노력했지만 할 수 없다.
- Spring은 커스텀 클래스 로더를 통해 이를 실현하고 있습니까?
- 그렇지 않은 경우 이 우선순위는 어떻게 작동합니까?제 콩과 비슷한 방식으로 우선 순위를 매겨도 될까요?
- 프로젝트 내에서 유사한 계층을 생성할 수 있습니까?
도움에 대단히 감사하다
Spring AutoConfiguration은 특정 클래스가 클래스 경로에 있는지 여부에 관계없이 기본 설정을 제공하기 위해 사용됩니다.
봄까지 콩이 인스턴스화되는 순서를 설정하려면
@DependsOn("A")
public class B {
...
}
이렇게 하면 콩 "A"가 생성되고 "B"가 생성됩니다.따라서 먼저 필요한 콩에 따라 설정을 주문할 수 있습니다.어쨌든 봄은 콩 클래스를 분석함으로써 의존성을 자동으로 검출합니다.자세한 내용은 이 질문을 참조하십시오.스프링 부트 자동 설정 순서
다른 방법 : "@AutoConfigureOrder" 주석도 있습니다(설정의 우선순위를 지정할 수 있습니다). 자세한 내용은 코드를 참조하십시오.
Auto Configuration 매뉴얼은 이쪽
우선, 클래스 로딩과 콩의 작성은 별개의 것입니다.클래스를 로드하기 위해 빈을 만들 필요는 없지만 빈을 만들기 위해서는 클래스를 로드해야 합니다.
에 의해 된 모든 @componentScan
을 만들 때 '콩은 콩은 콩은 콩은 콩은요.@Bean
,@Configuration
"/"/"@Component
는 생성된 하기 때문에및 유형이 콩으로 맞춤 스프링을 수 ).따라서 기본 콩과 이름 및 클래스 유형이 같은 사용자 정의 콩을 발견하면 원래 정의를 사용자 정의 콩으로 바꿉니다(예: 커스텀을 생성할 수 있습니다).@ObjectMapper
스프링 부츠 이 경우에도 하실 수 있습니다.@Primary
동일한 클래스의 다른 정의가 존재하는 경우 주석을 사용하여 bean이 우선됩니다(여기에 설명이 있습니다).
다음은 질문에 대한 답변입니다.
- 스프링은 반사를 사용하여 클래스를 로드하고 인스턴스를 만듭니다.커스텀 클래스 로더를 사용하여 클래스를 로드할 수 있지만(자세한 내용은 여기를 참조하십시오)
@Configuration
. - 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.
@Primary
주석을 사용하여 콩에 우선순위를 부여합니다. 이 경우에도 하실 수 있습니다.@Order
(여기서) 콩의 작성 순서를 정의합니다. - ★★★★★★★★★★★★★★★★
@Primary
,@Order
★★★★★★★★★★★★★★★★★」@Qualifier
주석 콩을 만들기 위한 고유한 계층을 정의할 수 있습니다.
제 콩과 비슷한 방식으로 우선 순위를 매겨도 될까요?
네.
에 A의 는 없습니다).Configuration은 Configuration클래스에 주석을 붙일 필요가 없습니다.(「 」, 「Configuration」)@Configuration
풀 라고 (풀 디피니션), (풀 디피니션), (풀 디피니션), (풀 디피니션)이@Component
,@ComponentScan
,@Import
,@ImportResource
''에 을 달기만 .@Bean
- 라이트 정의라고 .
1)를 1)에 합니다.SpringApplication
의 »primarySource
「」라고 하는 것이 있습니다.
SpringApplication.run(
new Class[]{YourSpringBootApplication.class, Config1.class, Config2.class, ...},
args);
각 에는 2)의 주석을 붙입니다.@Order
수단(예: annot, 음, 음, 음 등)Ordered
「」,@DependsOn
당합니다.ConfigurationClassPostProcessor
의 " " "primarySource
어레이도 무시됩니다.
★★★★★★★★★★★★★★★.ConfigurationClassPostProcessor
설정 되어 에 따라 됩니다.@Order
주석 값을 지정합니다.
B) AutoConfiguration 클래스를 정의함으로써 우선순위를 설정할 수도 있습니다.Configuration과 AutoConfiguration은 모두 동일하게 처리되지만ConfigurationClassPostProcessor
, 그것들은 본질적으로 독특한 기계들이다.그렇게 하기 위해서
) 1) " " " "/META-INF/spring.factories
Enable(에.에는 AutoConfiguration과 같은.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
your.package.AutoConfig1,your.package.AutoConfig2
에 2) 클래스에 주석을 추가합니다.@AutoConfigureOrder
,@AutoConfigureAfter
, 「」@AutoConfigureAfter
주석, 다른 모든 순서 지정 수단은 무시됩니다.
@것과 클래스, @Strelok의 AutoConfiguration 클래스, 예를 AutoConfiguration 클래스, @Strelok의 AutoConfiguration 클래스, @Strelok의 AutoConfiguration 클래스, @Strelok의 AutoConfiguration 클래스 입니다.spring-boot-autoconfigure
라이브러리와 마찬가지로 구성 후보 목록의 끝에 추가됩니다.
단, Configuration 후보 순서는 다음과 같이 처리된다는 점에 유의하십시오.ConfigurationClassPostProcessor
는 Configuration클래스에서 정의된 콩의 작성 순서와 반드시 일치하는 것은 아닙니다.예를 들어, 다음과 같이 덮어쓰는 구성 클래스를 정의할 수 있습니다.TomcatServletWebServerFactory
Web , 「Tomcat」등의 커스터마이즈를 합니다.
@Configuration
public class EmbeddedTomcatConfig {
@Bean
public TomcatServletWebServerFactory containerFactory() {
...
return customizedTomcatWebServerFactory;
}
, 이 는 Spring Boot 이 웹됩니다. Boot 가 어떻게 에 관계없이 .「」, 「Spring Boot」의 우선 순위.EmbeddedTomcatConfig
컨피규레이션클래스
Spring은 커스텀 클래스 로더를 통해 이를 실현하고 있습니까?
그럴 필요 없어요.인 정의를 수 ClassLoader
★★★★★★에BeanFactory
, scatus.ClassLoader
응용 프로그램의 구성에 필요한 모든 것을 클래스 경로에서 사용할 수 있다면 충분합니다.주의하세요, 첫 번째 단계에서는ConfigurationClassPostProcessor
는 설정 후보 클래스를 로드하지 않습니다(즉, 해결되지 않습니다).그렇지 않으면 대부분의 클래스가 에 있습니다.spring-boot-autoconfigure
(미국의분석기로 주석을 합니다.ASM
배열을 코드 분석기에 .이를 위해서는 바이트 코드 분석기에 공급하기 위한 클래스의 바이너리 형식인 바이트 어레이를 얻는 것으로 충분합니다.
이 점에 주의해 주십시오.스프링 부트(구체적으로는) 자동 설정 클래스는 항상 마지막에 설정됩니다.모든 사용자 bean이 생성된 후.Spring Boot 자동 설정 클래스는 거의 항상@ConditionalXXXX
Annotations를 사용하여 어플리케이션에 설정되어 있는 동일한 타입/이름의 콩 및 기타 조건이 Spring Boot 자동설정 콩보다 우선함을 확인합니다.
봄까지 모든 컴포넌트를 스캔할 때 @Component가 다른 @Component보다 우선되도록 하려면 @Order(Ordered)를 사용합니다.LOWEST_PRECEDION) 즉, 컴포넌트를 다른 컴포넌트보다 로드하기 위한 최대값입니다.
@Primary는 콩에 기본 프리퍼런스를 부여하기 위해 사용됩니다.@Qualifier를 사용하여 기본 프리퍼런스를 덮어쓸 수 있습니다.
언급URL : https://stackoverflow.com/questions/44314418/order-of-configuration-in-springboot
'code' 카테고리의 다른 글
servlet과 servlet의 차이점은 무엇입니까? (0) | 2023.03.19 |
---|---|
Wordpress는 관리자에게 네이티브 날짜 선택 기능을 제공합니까? (0) | 2023.03.19 |
jq를 사용하여 json 문서의 단일 값을 업데이트하려면 어떻게 해야 합니까? (0) | 2023.03.19 |
TypeScript에서 "keyof typeof"는 무엇을 의미합니까? (0) | 2023.03.19 |
리액트 - 컴포넌트 동적 Import (0) | 2023.03.19 |