[ 스프링 컨테이너_ApplicationContext ]
1. 컨테이너 설정파일
- 확장자 : .xml
- 서블릿 컨테이너 : web.xml
- 스프링 컨테이너 : applicationContext.xml
2. applicationContext.xml 루트 엘리먼트 : <beans></beans>
- 루트 엘리먼트(root element) : XML 문서의 최상위 요소. 즉, XML 문서의 시작과 끝을 나타내는 요소로서 다른 모든 요소는 루트 엘리먼트 안에 포함되어야 함. 보통 루트 엘리먼트는 하나의 XML 문서에 한 번만 나타남
- applicationContext.xml 파일에서는 <beans></beans>가 주로 루트 엘리먼트가 됨
- 이 파일에서 설정이 작성되는 주요 위치이기 때문에 루트 엘리먼트의 역할을 하게 됨
- 따라서 <beans><beans> 태그 사이에 스프링의 각종 설정이 <>태그로 작성됨
- 많이 들어가는 설정이 <bean></bean> 설정
3. <bean> 태그_개념
- Spring Framework의 핵심 개념 중 하나.
- 주로 applicationContext.xml과 같은 설정 파일에서 사용되며, 객체의 생성과 구성을 정의
- 일반적으로 자바에서 객체를 생성할 때는 new 키워드를 사용
- 그러나 스프링 프레임워크에서는 <bean> 태그를 사용해 객체를 생성하고 구성
- 이렇게 함으로써 코드 간의 결합도를 낮출 수 있음
- <bean>의 속성을 통해 스프링은 구성 요소를 관리하고, 필요에 따라 빈을 생성해 서버를 구동함
4. <bean> 태그_싱글톤
- 싱글톤 : 클래스의 객체가 하나만 생성되는 디자인 패턴
- <bean> 태그를 사용하면 빈에 등록된 객체들을 스프링 컨테이너가 구동될 때 한번에 heap메모리에 적재(load)
- 스프링 컨테이너가 구동될 때 딱 한번만 new == 싱글톤
- 이후 호출되면 (팩토리 패턴을 활용해서) 요청하는 객체를 전달함 (== lookup)
- 객체를 요청하는 행동을 LookUp이라고함
[ 주의 사항 및 적용 예시 ]
- 싱글톤 패턴은 전략적으로 사용해야 함
- 싱글톤 객체는 멤버 변수가 없는 경우 사용하는 것이 좋음 (DTO는 다른 설정 사용)
- DAO : 데이터 접근 객체는 싱글톤 패턴으로 구현하는 것이 일반적
5. <bean> 태그_속성
<bean class="클래스명" id="객체명" />
- class 속성 : 해당 bean이 어떤 클래스로 인스턴스화해야 하는지 지정
- id 속성 : 스프링 컨테이너에서 빈을 식별하는데 사용되는 고유한 식별자
- 규칙1) id값은 중복 허용 xx
- 규칙2) <bean>을 통해 new된 객체들은 Heap 메모리 영역에 저장됨
<bean class="" id="" init-method="메서드명" />
- init-method 속성 : 객체 생성 후 특정 메서드를 자동 호출해 초기화 작업 수행 (== 멤버변수 초기화 메서드)
- 장점 : 객체 생성 코드와 초기화 코드를 분리해 코드 중복 방지, 일관된 초기화 로직 구현
<bean class="" id="" lazy-init="true" />
- lazy-init 속성 : 빈 객체를 실제로 사용할 때까지 생성을 지연시키는 속성
- 모든 <bean>은 컨테이너 구동 시점에 new됨, lazy-init을 true로 설정하면 객체를 필요할 때 new할 수 있음!
- 객체를 사용하는 시점 == 클라이언트(Client, 브라우저, 사용자)가 호출하는 시점
- 장점 : 사용하지 않는 객체 생성을 최소화해 메모리 절약, 초기화 과정 시간 단축으로 시스템 성능 향상
<bean class="" id="" scope="singleton/prototype" />
- scope 속성 : 빈 객체의 생명 주기를 설정하는 속성
- singleton : 컨테이너 내에서 단일 객체 생성
- prototype : 요청 시마다 새로운 객체 생성 (보안에서 종종 사용하는걸로 알고있음)
----------------------------------------------------- 1-1
ex. 나 핸드폰 하나 new할래
Phone phone = new Phone();
↓
<bean class="test.Phone" id="phone" />
→ class를 쓸땐 정확한 패키지명까지 기재
----------------------------------------------------- 1-2
Phone phone2 = new Phone();
↓
<bean class="test.Phone" id="phone2" />
→ phone2라는 새로운 객체를 만드는 것은 규칙에 위배되진 않지만,
→ 에러 x, 권장 x → 싱글톤이 유지되지 않음
※ <bean>이 싱글톤을 알아서 해주는 것은 아님
phone이라는 이름의 객체가 다시 요구 됐을 때,
기존의 phone을 이미 메모리에 load(적재)되어있던 phone 객체를 다시 주는 것임
----------------------------------------------------- 2
handler = new HandlerMapper();
<bean class="controller.common.HandlerMapper" id="handler" />
----------------------------------------------------- 3
mappings.put("/main.do", new MainAction());
<bean class="controller.action.MainAction" />
→ id는 무명의 객체를 만들땐 사용하지 않음
'개발 > Spring' 카테고리의 다른 글
Spring Framework_컨테이너 & 빈 관리 (0) | 2024.07.16 |
---|---|
Spring Framework_의존성 주입(Dependency Injection, DI) (1) | 2024.07.16 |
Spring Framework_설치 (0) | 2024.07.16 |
Spring Framework_결합도(Coupling) (0) | 2024.07.16 |
Spring Framework_개념 (0) | 2024.07.16 |