본문 바로가기
spring

빈 lifecycle, PrototypeBean

by kcj3054 2021. 12. 29.

빈 lifecycle

  • 스프링 빈의 라이플 사이클
    • 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜벡 -> 사용 -> 소멸전 콜백 -> 스프링 종료
  • 참고 객체 생성시, 초기화
    • 객체를 생성할 때 생성자에 값을 다 넣으면 되지 않냐? -> No!!!
    • 객체 생성과 초기화를 분리하는 것이 유지보수에 좋다.
    • 초기화는 생성된 값들을 활용해서 외부 커넥션을 연결하는 등 무거운 동작을 수행

BeanLifeCycleTest

public class BeanLifeCycleTest {

    @Test
    public void lifeCycleTest() {
        ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);

        NetworkClient client = ac.getBean(NetworkClient.class);
        ac.close();
    }


    @Configuration
    static class LifeCycleConfig {

        @Bean
        public NetworkClient networkClient() {

            NetworkClient networkClient = new NetworkClient();
            networkClient.setUrl("http://hello-spring.dev");
            return networkClient;
        }
    }

}

PrototypeBean

  • 스프링은 기본적으로 빈이 싱글톤으로 관리된다.

  • 그러나 프로토타입으로 빈을 생성해도된다 이렇게 프로토타입으로 빈을 생성하면 스프링 컨테이가 빈을 모두 관리해주는 것이 아니라 소멸은 프로토타입 빈을 프로그래머가 관리를 해주어야한다.

  • 스프링 컨테이너는 프로토타입빈을 만들어주고, di까지 해주고 끝낸다. @Predetroy가 호출되지 않는다.

소스

public class PrototypeTest {


    @Test
    void

    @Scope("prototype")
    static class PrototypeBean {
        @PostConstruct
        public void init() {
            System.out.println("PrototypeBean.init");
        }

        @PreDestroy
        public void destroy() {
            System.out.println("PrototypeBean.destroy");
        }
    }
}

'spring' 카테고리의 다른 글

스프링, 바이트코드 조작, Configuration, 다이나믹 프록시  (0) 2021.12.29
AOP  (0) 2021.12.29
dto , mvc layerd architecture, Timestamped  (0) 2021.12.02
ocp, di, srp  (0) 2021.12.02
spring,... intellij 디버그  (2) 2021.11.30