본문 바로가기

Spring Boot

@Bean method must not be private or final

@Configuration class의 method 에 @Bean annotation을 붙여서 Spring bean을 등록할 수 있다.
이 때 method는 private이거나 final 이면 안된다.

우리는 @Bean annotaion이 붙은 method를 호출할 때, 항상 같은 Object를 반환하는 것을 확인할 수 있다.
이는 Spring이 @Configuration class의 CGLIB proxy를 생성하고, @Bean method를 호출을 가로채 하나의 Object만 반환하도록 하기 때문이다.

이 CGLIB 은 상속을 기반으로 proxy 객체를 생성한다. private 이나 final method는 상속이 불가능하기 때문에, bean으로서의 역할을 하는 method의 구현이 불가능해진다. 그래서 method는 private 이나 final이면 안된다.

reference. 

1. http://www.javabyexamples.com/cglib-proxying-in-spring-configuration

 

Home | Java By Examples

1. Overview In this quick tutorial, we'll talk about CGLIB proxying in Spring @Configuration classes. Mainly, we'll look at some practical examples, and then examine some development rules - like avoiding final in @Bean methods - for this mechanism to work

www.javabyexamples.com

2. https://www.springcloud.io/post/2023-01/jdk-porxy-and-cglib/#gsc.tab=0

 

Java JDK Proxy and CGLib Dynamic Proxy

Explore the principles of jdk proxy and cglib dynamic proxies and the differences between them with sample code.

www.springcloud.io

 

반응형