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

jeong정재인님의 프로필 이미지
jeong정재인

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

@Slf4j

작성

·

221

0

@Slf4j 롬복을 이용하여 log값을 출력할때,

맨 위 클래스에 작성하고 사용하지 않고 클래스 위에 각각 @Slf4j를 작성하는 이유는 무엇인지 궁금합니다.

답변 1

0

안녕하세요. jeong정재인님, 공식 서포터즈 David입니다.

맨 위 클래스라는 건 어떤 걸 말씀하시는걸까요?

감사합니다.

package hello.springtx.apply;

import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.event.EventListener;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronizationManager;

@SpringBootTest
public class InitTxTest {

    @Test
    void go(){
        //초기화 코드는 스프링이 초기화 시점에 호출된다.
    }

    @TestConfiguration
    static class InitTxTestConfig{
        @Bean
        Hello hello(){
            return new Hello();
        }
    }

    @Slf4j
    static class Hello{

        @PostConstruct
        @Transactional
        public void initV1(){
            boolean isActive = TransactionSynchronizationManager.isActualTransactionActive();
            log.info("Hello init @PostConstruct tx active={}", isActive);
        }

        @EventListener(ApplicationReadyEvent.class)
        @Transactional
        public void initV2(){
            boolean isActive = TransactionSynchronizationManager.isActualTransactionActive();
            log.info("Hello init ApplicationReadyEvent tx active={}", isActive);
        }
    }
}

 

예를 들어, 이 코드를 봤을때 public class InitTxTest 위에 @Slf4j를 작성하지 않고, static class Hello 위에 작성하는지 궁금합니다.

public class InitTxTest 위에 작성하면 static class Hello에서도 사용할 수 있지 않나요?

답글 달기

공유

Hello 클래스 내에서만 로그를 사용하고 있기 때문입니다:)

jeong정재인님의 프로필 이미지
jeong정재인

작성한 질문수

질문하기