@Configuration과 CGLIB의 관계
@Configuration
@Configuration 어노테이션이 붙은 클래스는 스프링 설정 클래스다. 이 설정 클래스는 보통 빈(Bean) 정의와 같은 애플리케이션 컨텍스트의 구성 정보를 담고 있다. @Bean 어노테이션이 붙은 메서드들은 해당 메서드의 반환값을 빈으로 등록한다.
CGLIB
CGLIB(Code Generation Library)는 런타임에 클래스의 바이트코드를 조작하는 라이브러리이다. 이 라이브러리를 이용해 프록시 객체를 생성하거나 메서드 호출을 가로채는 등의 작업을 수행한다.
@Configuration 어노테이션과 CGLIB의 관계
@Configuration 어노테이션이 붙은 클래스는 CGLIB를 이용해 클래스의 프록시가 생성된다. 이 프록시 클래스는 @Bean 어노테이션이 붙은 메서드를 오버라이드해서 스프링 컨테이너에 단 한번만 등록되도록 관리한다. 이렇게 함으로써, @Bean 어노테이션을 사용하여 동일한 빈을 여러 번 생성하는 것을 방지하고, 싱글톤 패턴을 유지할 수 있게 된다.
단, @Configuration 없이 @Bean만 사용한 경우에는 CGLIB를 통한 프록시 생성이 이루어지지 않으며, @Bean 메소드는 매번 새로운 인스턴스를 반환하게 된다. 이는 싱글톤 패턴을 유지하지 않는다. 이런 경우에는 @Configuration을 붙여 CGLIB 프록시를 활용하게 함으로써 빈의 싱글톤을 보장할 수 있다.
요약하자면, @Configuration은 CGLIB를 통해 스프링 빈의 생명주기를 관리하고, 싱글톤 패턴을 보장하는 역할을 한다.
728x90
반응형
'Spring | Spring Boot' 카테고리의 다른 글
@ModelAttribute와 @RequestBody 차이점 (0) | 2024.02.17 |
---|---|
Spring AOP 개념 정리 (0) | 2023.12.20 |