Skip to content

Instantly share code, notes, and snippets.

@djkeh
Last active April 30, 2020 02:40
Show Gist options
  • Save djkeh/6194d9123256042be06c6df72a3a3e58 to your computer and use it in GitHub Desktop.
Save djkeh/6194d9123256042be06c6df72a3a3e58 to your computer and use it in GitHub Desktop.
프로토타입 빈 + InjectionPoint를 이용한 최신 스프링 Logger 주입 예제 코드
// 스프링 4.3부터 추가된 InjectionPoint를 이용한 Context-Aware Bean 생성 방법.
@Configuration
public class BeanConfig {
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
Logger logger(InjectionPoint injectionPoint) {
return LoggerFactory.getLogger(injectionPoint.getMethodParameter().getContainingClass());
}
}
@Controller
public class SampleController {
private final Logger logger;
public SampleController(Logger logger) {
this.logger = logger;
}
public void controllerMethod() {
logger.info("LOG!");
}
}
@djkeh
Copy link
Author

djkeh commented Jul 19, 2017

이런 방식은 IDE 플러그인 등을 이용해 매번 필드와 생성자 코드를 자동 생성하지 않는 이상, 그래도 반복적으로 타이핑해야 할 부분이 존재한다는 점에서 Lombok 보다는 사용성 면에서 쪼금 더 손이 가겠네요. 대신 로그 객체를 빈으로 등록해 스프링 IoC 컨테이너에게 맡기고 이를 사용 클래스에서 주입 받는 의존 관계가 API에 명확히 드러난다는 점이 좋은 것 같습니다.

@djkeh
Copy link
Author

djkeh commented Apr 19, 2018

이 코드는 spring-projects/spring-boot#8106 에서 논의되었고, 이 코드가 가져오는 이득이 크지 않은 것으로 판단되어 스프링 부트 삽입에 채택되지 않았습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment