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

김동현님의 프로필 이미지
김동현

작성한 질문수

스프링 핵심 원리 - 기본편

@Configuration과 바이트코드 조작의 마법

@Bean 메서드를 호출하면 프록시되어서 AppConfig@CGLIB 의 override 된 함수가 실행되는건가요?

작성

·

431

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
영한님의 말씀에 의하면

AppConfig의 자식클래스인 AppConfig@CGLIB가 스프링 빈으로 제일 먼저 등록되어서, 누가 @Bean 메서드를 호출하려할때 가로챈? 다음, 빈으로 등록된 AppConfig@CGLIB에 override 된 해당 메서드를 실행하여 (등록이 안되어 있으면)스프링 빈으로 등록할지, 등록된 걸 내보낼지 결정한다. 라고 이해했는데 맞는지 궁금합니다!

답변 1

2

김동현님의 프로필 이미지
김동현
질문자

해결했습니다. 참고하시라고 내용 함께 남깁니다.

본인

나는 AppConfig 클래스가 빈으로 등록되는게 아니라 AppConfig 클래스를 상속받은 AppConfig@CGLIB 클래스가 AppConfig 라는 이름으로 빈에 등록된다고 알고 있는데 내가 틀린거야?

ChatGPT

죄송합니다, 이해를 잘못하고 있었습니다. 당신이 설명하신 대로 맞습니다.

AppConfig 클래스가 @Configuration 어노테이션이 적용되어 있고, 스프링 컨테이너에서 관리되는 빈으로 등록됩니다. 그러나 실제로 스프링은 CGLIB를 사용하여 AppConfig 클래스를 상속받은 프록시 클래스인 AppConfig@CGLIB를 생성하고, 이 프록시 클래스를 빈으로 등록합니다.

따라서 AppConfig@CGLIB라는 클래스가 AppConfig라는 이름의 빈으로 스프링 컨테이너에 등록되며, 이 프록시 클래스는 원본 AppConfig를 확장하여 의존성 주입 등의 기능을 제공합니다. @Bean으로 어노테이션된 메서드들은 이 프록시 클래스 내에서 호출되어 관리되고, 빈은 싱글톤으로 동작합니다.

정확히 말씀드리면, AppConfig 클래스 자체는 빈으로 등록되지 않습니다. 대신, 이 클래스를 상속받은 프록시 클래스 AppConfig@CGLIBAppConfig라는 이름의 빈으로 등록되는 것이 맞습니다. 이 프록시 클래스는 스프링이 빈의 생성과 의존성 주입을 관리하는데 사용됩니다.

다시 한 번, 제가 이전에 드린 설명이 잘못되었고, 당신이 말씀하신 것이 맞습니다. 감사합니다.

김동현님의 프로필 이미지
김동현

작성한 질문수

질문하기