///////
Search
🌱

Bean Lite Mode는 무엇인가요?

Lite Mode란?
→ Cglib를 사용하여 바이트 코드 조작을 하지 않음을 의미
→ Spring Bean의 싱글톤을 보장하지 않는다.
@Configuration 어노테이션을 지정하게 되면 Cglib가 사용되며 메서드 호출은 모두 1회만 일어나도록 바이트 코드가 수정된다.
@Component 어노테이션을 지정하게되면 Lite Mode 로 동작하여 예상한 대로 코드가 수행된다.
이 때, Configuration 에 proxyBeanMethods 란 설정값을 false로 줄 수 있는데, 이 경우 Lite Mode 라 불리는 상태가 되며 Cglib를 통한 메서드 프록시가 적용되지 않는다.
@Configuration 이 붙은 클래스
CGLIB 을 이용해 프록시 객체를 생성한다. 메서드를 호출했을 때 Bean이 이미 생성되어 있다면 새로운 Bean을 생성하지 않고 캐싱된 Bean을 불러온다.
@Configuration public class AuthenticationPrincipalConfig { @Bean public SharedDependency sharedDependency() { return new SharedDependency(); } @Bean public AuthService authService() { return new AuthService(sharedDependency()); } @Bean public AuthService2 authService2() { return new AuthService2(sharedDependency()); } }
Java
복사
@Configuration이 없는 순수한 클래스, @Component 가 붙은 클래스
프록시 객체를 생성하지 않고 바로 객체를 생성해버리기 때문에 sharedDependency를 호출할 때 마다 인스턴스를 새로 생성한다.
public class AuthenticationPrincipalConfig { @Bean public SharedDependency sharedDependency() { return new SharedDependency(); } @Bean public AuthService authService() { return new AuthService(sharedDependency()); } @Bean public AuthService2 authService2() { return new AuthService2(sharedDependency()); } }
Java
복사
요약
Bean Lite Mode에서는 프록시 객체를 생성하지 않고 바로 객체를 생성해버리기 때문에, Bean 스코프가 싱글톤으로 설정되어 있으나 스프링이 싱글톤을 보장해주지 못한다.