programing

스프링: 특정 콩을 먼저 초기화해야 합니다.

abcjava 2023. 7. 30. 16:46
반응형

스프링: 특정 콩을 먼저 초기화해야 합니다.

log4j(log4j.properties 또는 log4j.xml 없음)의 런타임 설정 및 구성을 수행하는 라이브러리가 있습니다.My Logger Factory라는 클래스의 빈을 정의했으며 이 빈이 스프링을 사용하여 처음으로 초기화되기를 원합니다.초기화 순서에 대한 지원을 받기 위해 스프링에 이미 문제가 제기된 것을 보았습니다만, 봄 컨테이너에 의해 최초로 초기화된 콩으로 콩을 표시할 수 있는 방법이 있는지 궁금합니다.

옵션은 다음과 같습니다.

  1. 주석(봄 3.0.x 이후에 사용 가능) 또는 xml-속성을 사용하고 구성된 로거를 사용하는 모든 클래스를 로거 팩토리에 종속시킵니다.
  2. 공장을 벌목꾼을 위한 실제 공장으로 만들고, 공장에 직접 전화를 거는 대신 벌목꾼을 콩에 주입합니다. 즉, 종속성이 명시되어 있다는 점을 제외하고는 옵션 1과 기본적으로 동일합니다.이것이 제가 추천하는 옵션입니다.
  3. 초기화 코드를 통화 순서가 지정된 코드 부분으로 이동합니다.main()방법, 또는ServletContextListenerSpring을 초기화하는 것보다 먼저 등록되었습니다.

Spring에서 초기화 순서를 명시적으로 정의할 수 있는 방법은 없으며 앞으로도 그럴 가능성이 높습니다. 순서가 충돌할 수 있는 많은 애플리케이션 컨텍스트 구성 파일을 로드할 수 있기 때문에 유용한 의미론을 정의할 방법이 없습니다.의존성 주입 패턴을 더 잘 준수하도록 코드를 리팩터링하여 원하는 주문을 달성할 수 없었던 경우는 아직 본 적이 없습니다.

기본 @Configuration에서 @Autowired a @Configuration을 사용할 수 있습니다.

@Configuration
@Import(BusinessConfig.class, EarlyBeans.class)
public class MainConfiguration {

    // The bean defined in EarlyBean will be loaded before 
    // most beans references by MainConfiguration, 
    // including those coming from BusinessConfig
    @Autowired
    EarlyBeans earlyBeans;

}

@Configuration
public class EarlyBeans {
    @Bean
    public Void earlyBean(ApplicationContext appContext) {
        // .getBeansOfType allows to call for beans which might not exist
        appContext.getBeansOfType(TechnicalBean.class);

        return null;
    }

}

요청되었지만 해결되지 않은 기능입니다.의존 관계를 사용할 수 있지만 너무 장황합니다.자세한 내용은 다음 링크를 참조하십시오. https://jira.springsource.org/browse/SPR-3948

응용프로그램 컨텍스트를 여러 개로 분할하고 기본 응용프로그램 컨텍스트에서 가져오기를 사용할 수 있습니다.기본 환경 설정을 가져오기 순서대로 먼저 배치한 다음 다른 파일을 계속 추가할 수 있습니다.

아래와 같을 수 있습니다.

<!-- Import environment properties settings. -->
<import resource="Spring-Env.xml"/>
<!-- Import All the other Application contexts. -->
<import resource="Spring-MainApplicationContext.xml"/>

언급URL : https://stackoverflow.com/questions/7868335/spring-make-sure-a-particular-bean-gets-initialized-first

반응형