@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
2. https://www.springcloud.io/post/2023-01/jdk-porxy-and-cglib/#gsc.tab=0
반응형