code

Spring Boot에서의 설정 순서

starcafe 2023. 3. 19. 18:22
반응형

Spring Boot에서의 설정 순서

.@Configuration는 기본적으로 SpringBoot에 의해 생성된 콩을 덮어쓰는 경향이 있습니다.저는 ZuulConfigs와 같은 것을 위해 콩을 만드는 프로젝트를 진행하고 있으며, 그 프로젝트에서는 기본 생성 콩보다 우리가 만드는 것이 우선시된다는 가정 하에 있습니다.나는 이것을 알아내려고 노력했지만 할 수 없다.

  1. Spring은 커스텀 클래스 로더를 통해 이를 실현하고 있습니까?
  2. 그렇지 않은 경우 이 우선순위는 어떻게 작동합니까?제 콩과 비슷한 방식으로 우선 순위를 매겨도 될까요?
  3. 프로젝트 내에서 유사한 계층을 생성할 수 있습니까?

도움에 대단히 감사하다

Spring AutoConfiguration은 특정 클래스가 클래스 경로에 있는지 여부에 관계없이 기본 설정을 제공하기 위해 사용됩니다.

봄까지 콩이 인스턴스화되는 순서를 설정하려면

@DependsOn("A") 
 public class B {
 ...    
}

이렇게 하면 콩 "A"가 생성되고 "B"가 생성됩니다.따라서 먼저 필요한 콩에 따라 설정을 주문할 수 있습니다.어쨌든 봄은 콩 클래스를 분석함으로써 의존성을 자동으로 검출합니다.자세한 내용은 이 질문을 참조하십시오.스프링 부트 자동 설정 순서

다른 방법 : "@AutoConfigureOrder" 주석도 있습니다(설정의 우선순위를 지정할 수 있습니다). 자세한 내용은 코드를 참조하십시오.

Auto Configuration 매뉴얼은 이쪽

우선, 클래스 로딩과 콩의 작성은 별개의 것입니다.클래스를 로드하기 위해 빈을 만들 필요는 없지만 빈을 만들기 위해서는 클래스를 로드해야 합니다.

에 의해 된 모든 @componentScan을 만들 때 '콩은 콩은 콩은 콩은 콩은요.@Bean,@Configuration "/"/"@Component는 생성된 하기 때문에및 유형이 콩으로 맞춤 스프링을 수 ).따라서 기본 콩과 이름 및 클래스 유형이 같은 사용자 정의 콩을 발견하면 원래 정의를 사용자 정의 콩으로 바꿉니다(예: 커스텀을 생성할 수 있습니다).@ObjectMapper스프링 부츠 이 경우에도 하실 수 있습니다.@Primary동일한 클래스의 다른 정의가 존재하는 경우 주석을 사용하여 bean이 우선됩니다(여기에 설명이 있습니다).

다음은 질문에 대한 답변입니다.

  1. 스프링은 반사를 사용하여 클래스를 로드하고 인스턴스를 만듭니다.커스텀 클래스 로더를 사용하여 클래스를 로드할 수 있지만(자세한 내용은 여기를 참조하십시오)@Configuration.
  2. 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.@Primary주석을 사용하여 콩에 우선순위를 부여합니다. 이 경우에도 하실 수 있습니다.@Order(여기서) 콩의 작성 순서를 정의합니다.
  3. ★★★★★★★★★★★★★★★★ @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 자동 설정 클래스는 거의 항상@ConditionalXXXXAnnotations를 사용하여 어플리케이션에 설정되어 있는 동일한 타입/이름의 콩 및 기타 조건이 Spring Boot 자동설정 콩보다 우선함을 확인합니다.

봄까지 모든 컴포넌트를 스캔할 때 @Component가 다른 @Component보다 우선되도록 하려면 @Order(Ordered)를 사용합니다.LOWEST_PRECEDION) 즉, 컴포넌트를 다른 컴포넌트보다 로드하기 위한 최대값입니다.

@Primary는 콩에 기본 프리퍼런스를 부여하기 위해 사용됩니다.@Qualifier를 사용하여 기본 프리퍼런스를 덮어쓸 수 있습니다.

언급URL : https://stackoverflow.com/questions/44314418/order-of-configuration-in-springboot

반응형