Spring
Spring 컨테이너의 개념
Spring 컨테이너는 객체의 생성, 초기화, 소멸 등 생명 주기를 관리하는 핵심 컴포넌트
IoC(제어의 역행) 원칙에 따라 개발자가 아닌 컨테이너가 객체를 관리
Spring 컨테이너의 역할
객체 관리: Spring은 POJO(Plain Old Java Object)를 관리하여 복잡한 객체 생성 및 의존성 문제를 해결
의존성 주입: 필요한 객체를 생성하고 주입하는 과정을 자동화하여 코드의 가독성과 유지보수성을 향상
Spring 컨테이너의 종류
BeanFactory: 기본적인 컨테이너로, 필요한 객체(Bean)를 지연 로딩 방식으로 생성
메모리 사용이 효율적이지만 기능이 제한적
ApplicationContext: BeanFactory의 확장 버전으로, 더 많은 기능을 제공
AOP(Aspect-Oriented Programming) 를 지원
//컨테이너 구동 코드
// 스프링에서 제공하는 컨테이너 객체 == 스프링 자체는 아님
AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
Spring 컨테이너의 로딩 방식
즉시 로딩 (Pre-loading): Spring 컨테이너가 시작될 때 모든 객체를 즉시 로드
성능은 좋지만 초기화 시간이 길어질 수 있음
지연 로딩 (Lazy-loading): 실제 사용 시점에 객체를 로드하여 메모리 사용을 최적화
이 방식은 필요할 때만 객체를 생성하여 리소스를 절약
<!-- 생성자 메서드에서 멤버변수를 초기화하는 것이 맞지만 -->
<!-- JAVA이전 언어들은 생성자 메서드라는 개념이 없던 언어도 있어 init-method라는 개념이 추가되었다. -->
<!-- <bean class="test.IPhone" id="apple" lazy-init="true" init-method="initMethod" scope="singleton"/> -->
<!-- scope는 기본이 singleton으로 적용되고 -->
<!-- 만약 여러번 생성하고 싶다면 scope="prototype" -->
<bean class="test.AppleWatch" id="aw" />
<bean class="test.GalaxyWatch" id="gw"/>
설정 방식
Spring 컨테이너는 설정 파일을 통해 구성됨
- XML 설정: applicationContext.xml 파일을 통해 객체의 생성 및 설정을 정의
- Java Configuration: @Configuration 어노테이션을 사용하여 Java 코드 내에서 직접 Bean을 정의할 수 있음
- @Component 스캔: 특정 패키지를 스캔하여 @Component, @Service, @Repository 등의 어노테이션이 붙은 클래스를 자동으로 Bean으로 등록함
Bean의 생명 주기
- 인스턴스 생성: Bean이 생성
- 의존성 주입: 필요한 의존성을 주입
- 초기화: 초기화 메서드가 호출
- 사용: Bean이 실제로 사용
- 소멸: 컨테이너가 종료되거나 Bean이 더 이상 필요하지 않을 때 소멸
싱글톤 패턴
Spring 컨테이너는 기본적으로 싱글톤 패턴을 사용하여 Bean을 관리
내가 주입을 몇개 했냐를 가지고도 알맞은 생성자를 주입
하나의 객체만 생성되어 애플리케이션 전체에서 동일한 인스턴스를 사용하도록 보장
'javaboiii의 Spring' 카테고리의 다른 글
Spring - 개념 복습 / 어노테이션 (0) | 2024.10.04 |
---|---|
Spring - 의존성 주입 (1) | 2024.10.02 |
Spring - Spring Framwork 구조 (1) | 2024.10.02 |
Spring - Spring Framwork 정의 (2) | 2024.10.02 |
Spring - MVC 핸들러맵핑과 싱글톤패턴 (0) | 2024.08.21 |