Lazy-init태그
스프링 컨테이너의 기본 빈 정책은 컨테이너 빌드 시 필요한 모든 빈 객체를 생성함. 등록 돼 있는 각 객체(빈)들이 컨테이너가 만들어질 때 싹 다 만들어놓고 보관하고 있음. 컨테이너가 만들어질 때 모든 객체를 다 만들어서 넣어놓게 돼 있음. 언제나 불려질 때 꺼내 줄 수 있도록. 근데 이러면 가끔 쓰는 것까지 다 넣어놓으면 넘 무거워 지자나, 그럴 때 속성값을 줘서 관리해줄 수 있음. 그럴 때, 클래스 뒤에다 lazy-init에 True값을 주면 해당 빈 객체는 컨테이너 빌드 시 생성 안하고 있다가 처음으로 getBean 요청이 들어올 때 생성해줌. 또한 getBean을 계속 해도 만들어져 있던 객체를 고대로 주기만 할뿐 새로 만드는 거 아님. 맨 처음 만들어진 객체를 계속 해서 재사용함. 즉 default(=false)값이 싱글톤(Singletone)으로 구현돼 있음 아래에서 확인해보자
<bean id ="robot" class = "DI_05_SpringCon.Robot" lazy-init="true"></bean> getBean을 계속 해도 만들어져있던 객체를 고대로 주기만 할 뿐 새로 만드는 거 아님.
만약... 요청할 때마다 새 객체를 주기를 원한다면...? scope="prototype"
<bean id ="robot" class = "DI_05_SpringCon.Robot" scope="prototype"></bean>
lazy-init 안써놓으면은 컨테이너 빌드시 그냥 다 만들어 놓고 기다리고 있음. lazy-init 트루를 쓰면 getBean할 때 만들어서 주게 됨. 빌드시 생성할지 요청할 떄 생성할지 생성시기를 구별.
또, 스프링은 객체생성시 기본값이 싱글톤임. 이걸 싱글톤이 아니라 새로운 객체로 만들게하고 싶으면 scope="Prototype"설정을 하면 됨.
'Dev > spring' 카테고리의 다른 글
Learn Spring 5( Boot 2, JPA, Thymeleaf, AOP...) - 18. @OneToMany and @ManyToOne Annotations for Relating Entities (0) | 2019.12.18 |
---|---|
[스프링프레임워크] AOP 구현 (0) | 2019.11.10 |
[스프링프레임워크] transaction, rollback, jndi (0) | 2019.11.10 |
[스프링프레임워크] 스프링 주요특징 - 의존성주입(DI)를 통한 객체 간의 관계 구성 (0) | 2019.10.30 |
[스프링프레임워크] 프로젝트의 가장 기본설정 부분인 web.xml에 대하여 알아보자. (0) | 2019.10.24 |