Spring Bean Lite Mode
스프링 bean 등록은 @Configuration 하게 되면 lite mode가 아니고, @Component에서 하게 되면 lite mode로 동작하게 된다. 말보다는 코드로...
@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라고 한다.
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라고 한다.
댓글
댓글 쓰기