강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

jhahn님의 프로필 이미지
jhahn

작성한 질문수

스프링 핵심 원리 - 고급편

스프링 AOP 구현6 - 어드바이스 종류

LogTrace, AopConfig 순환 참조..

작성

·

504

0

안녕하세요. 제가 아래 코드 처럼 개인 프로젝트에 로그를 추가해보고 싶어 빈으로 등록 했습니다.

@Configuration
public class LogConfig {
    @Bean
    public LogTrace logTrace() {
        return new ThreadLocalLogTrace();
    }
}
@Slf4j
@Aspect//ㅇㅓ드바이저로 변환하여 저장(어드바이저 빌더)
public class LogTraceAspect {
    //어드바이스 로직
    private final LogTrace logTrace;

    public LogTraceAspect(LogTrace logTrace) {
        this.logTrace = logTrace;
    }
}
@Configuration
public class AopConfig {

    @Bean
    public LogTraceAspect logTraceAspect(LogTrace logTrace) {
        return new LogTraceAspect(logTrace);
    }
}

┌─────┐

| logTraceAspect defined in class path resource [co/kr/***/cofig/aop/AopConfig.class]

↑ ↓

| logTrace defined in class path resource [co/kr/****/cofig/log/LogConfig.class]

└─────┘

이렇게 순환 참조 에러가 나더라구요..log와 aop에서 서로 참조하고 있는데 어떻게 설계를 해야 할지 감이 잘 안옵니다.

빈을 아래와 같이 한 곳에 모아두면 잘 동작 하지만 왜 동작 하는지 이해가 안되며 이렇게 해도 되는지 모르겠습니다.

@Configuration
public class AopConfig {

    @Bean
    public LogTraceAspect logTraceAspect(LogTrace logTrace) {
        return new LogTraceAspect(logTrace);
    }

    @Bean
    public LogTrace logTrace() {
        return new ThreadLocalLogTrace();
    }
}

혹시 더 좋은 방법이 있을까요??

감사합니다.

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. jhahn님

이러한 설정 클래스는 AOP의 대상이 되지 않도록 설정하시는 것이 좋습니다.

패키지 위치를 적절하게 조정하고 서로의 설정 클래스가 대상이 되지 않도록 조정해주세요.

감사합니다.

jhahn님의 프로필 이미지
jhahn

작성한 질문수

질문하기