티스토리 뷰
Spring Bean 의 Lite Mode 가 있다.
Lite mode 라 함은 Cglib 를 사용하여 바이트 코드 조작을 하지 않음을 의미한다.
@Configuration 어노테이션을 지정하게 되면 Cglib가 사용되며 메서드 호출은 모두 1회만 일어나도록 바이트 코드가 수정된다.
@Component 어노테이션을 지정하게되면 Lite Mode 로 동작하여 우리가 예상한 대로 코드가 수행된다.
이 때, Configuration 에 proxyBeanMethods 란 설정값을 false로 줄 수 있는데, 이 경우 Lite Mode 라 불리는 상태가 되며 Cglib를 통한 메서드 프록시가 적용되지 않는다.
@Configuration
public class ConfigurationClass
{
@Bean
public Bean1 bean1() {
return new Bean1();
}
@Bean
public Bean2 bean2() {
return new Bean2(bean1());
}
}
이 경우 bean1() 메서드 호출은 1회만 일어난다. Cglib 를 통해 메서드의 프록시를 이용하여 최종적으로 실제 호출이 1번만 이뤄지도록 변형된다.
@Configuration(proxyBeanMethods = false)
public class ConfigurationClass
{
@Bean
public Bean1 bean1() {
return new Bean1();
}
@Bean
public Bean2 bean2() {
return new Bean2(bean1());
}
}
그런데 이렇게 할 경우(@Compoent로 대체해도 같다), 우리가 예상하는 바와 같이 bean1 메서드는 2회 호출된다.
참고 자료 : wonwoo.ml/index.php/post/2000
'Java' 카테고리의 다른 글
Java ConditionalOnClass 어노테이션 (0) | 2020.11.05 |
---|---|
Java @Generated 어노테이션 (0) | 2020.11.05 |
[멋대로 번역]Java 8 API by Example: Strings, Numbers, Math and Files (0) | 2017.04.21 |
Java 동시성(Concurrentcy) Atomic and ConcurrencyMap Part 3 (0) | 2017.04.19 |
Java 동시성(Concurrentcy) Atomic and ConcurrencyMap Part 2 (0) | 2017.04.19 |