Spring Bean Lite Mode

스프링 bean 등록은 @Configuration 하게 되면 lite mode가 아니고, @Component에서 하게 되면 lite mode로 동작하게 된다. 말보다는 코드로...

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
@Slf4j
//@Configuration(proxyBeanMethods = true)
// proxyBeanMethods = false & @Component is lite mode.
@Configuration(proxyBeanMethods = false)
//@Component
public class TestConfig {
    @Bean
    public MyHello myHello() {
        return new MyHello("ok?");
    }

    @Bean
    public MyHelloWrapper myHelloWrapper() {
        MyHello m = myHello();
        log.info("In MyHelloWrapper, myHello #1={}", m);
        log.info("In MyHelloWrapper, myHello #2={}", myHello());
        log.info("In MyHelloWrapper, myHello #3={}", myHello());
        return new MyHelloWrapper(m);
    }
}

@Configuration의 default는 proxyBeanMethods = true이다. 이때는 gclib을 이용해 bean을 singleton으로 관리하는 proxy를 생성 한다. 그래서 15, 16, 17 line의 object reference가 모두 동일하게 나오는 것을 확인 할 수 있다.

@Configuration(proxyBeanMethods = false)나 @Component는 proxy 생성이 없으며 일반적인 Java 프로그램에서 new 한것과 동일한 동작을 하게 된다. 그래서 15, 16, 17 line에서 object가 모두 다른 reference 값이 나오는 것을 확인 할 수 있다.

이처럼 bean을 호출 했을 때 새로운 object가 생성되는 모드를 lite mode라고 한다.

댓글

이 블로그의 인기 게시물

[Protocol] WIEGAND 통신

Orange for Oracle에서 한글 깨짐 해결책

[UI] GNB·LNB·SNB·FNB 용어 설명