작성
·
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@CGLIB
가 AppConfig
라는 이름의 빈으로 등록되는 것이 맞습니다. 이 프록시 클래스는 스프링이 빈의 생성과 의존성 주입을 관리하는데 사용됩니다.
다시 한 번, 제가 이전에 드린 설명이 잘못되었고, 당신이 말씀하신 것이 맞습니다. 감사합니다.