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

도토리님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

탐색 위치와 기본 스캔 대상

스프링 빈 자동 등록 방식에서의 @Configuration

작성

·

187

0

(@Bean을 통해 스프링 빈을 수동 등록하는 방식이 아닌) 컴포넌트 스캔을 통해 자동 등록하는 방식을 사용할 때도 @Configuration이 붙은 클래스에 CGLIB가 적용되나요?

컴포넌트 스캔 방식을 사용하는 AutoAppConfig 클래스 내부에는 아무런 코드도 존재하지 않고, 그렇다면 AutoAppConfig@CGLIB에서 오버라이딩할 메서드가 존재하지 않습니다. 기존에는 오버라이딩된 메서드 내에 싱글톤을 보장하는 코드가 담겨 있었는데, 이 방식은 메서드가 아닌 클래스 단위로 스프링 빈을 등록하므로 CGLIB를 적용할 필요가 없어 보입니다.

답변 2

0

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

안녕하세요. 도토리님

생각하신 내용이 맞습니다.

AutoAppConfig 클래스 내부에 아무런 코드가 없기 때문에 CGLIB가 적용될 필요가 없습니다. 하지만 @Configuration이 붙으면 CGLIB가 적용되도록 되어 있기 때문에, CGLIB가 불필요하지만 적용은 됩니다.

참고로 CGLIB는 @Configuration이 붙어있는 클래스에만 적용됩니다. 예를 들어서 AutoAppConfig 클래스 자체에만 CGLIB가 적용되는 것이고, @Bean으로 등록한 빈에 CGLIB가 적용되는 것은 아닙니다. 컴포넌트 스캔을 사용하든 아니든 마찬가지 입니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

도토리님의 질문은 스프링의 컴포넌트 스캔을 사용할 때 @Configuration이 붙은 클래스에 CGLIB 프록시가 적용되는지 여부에 대한 것으로 이해되었습니다. 이에 대한 질문에 비슷한 내용을 다룬 기존 답변을 찾았습니다.

본 내용에서 제공되는 접근 방식에 따르면, @Configuration이 붙은 설정 클래스는 CGLIB 프록시를 통해 싱글톤을 보장합니다. 컴포넌트 스캐닝이 이루어지며, 스프링 빈으로 자동 등록되기 위해서는 @Configuration이 설정 클래스에 붙어있어야 합니다. 굳이 AutoAppConfig 클래스 내부에 코드가 없더라도, 스프링은 @Configuration이 붙은 클래스를 다르게 처리하여 설정 정보로 활용합니다.

추가적으로, “@Configuration과 바이트코드 조작의 마법에 대해서 궁금한점이 있습니다.“에서도 관련 내용을 확인하실 수 있습니다. 여기서는 @Configuration이 붙은 클래스가 프록시 객체로 생성되는지를 설명하고 있습니다. 따라서, @Configuration이 붙었다면, Spring은 클래스에 CGLIB를 적용하여 스프링 빈으로 등록된 객체들의 싱글톤을 보장합니다.

즉, 컴포넌트 스캔을 사용하여 자동 빈 등록을 할 때, @Configuration이 붙은 클래스에 대해서는 Spring이 CGLIB를 사용하여 프록시 객체를 생성하고, 이를 통해 해당 설정 클래스에서 생성하는 빈들의 싱글톤을 보장합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.