개발
토비의 스프링3.1 Vol.2 스프링의 기술과 선택 요야깅
wannabenomad
2018. 8. 6. 17:46
- 들어가며
- 스프링이란 무엇인가?
- 애플리케이션의 기본 틀 > 스프링 컨테이너
- 스프링 컨테이너 또는 애플ㅁ리케이션 컨텍스트 > 설정정보를 참고로 구성 오브젝트를 생성, 관리
- 공통 프로그래밍 모델 > IoC/DI, 서비스 추상화, AOP
- IoC/DI > 오브젝트의 생명주기와 의존관계 모델
- 서비스 추상화 > 구체적 기술, 환경에 종속적이지 않도록 유연한 추상 계층 두어야
- AOP > 애플리케이션 코드에 산재한 (수평적 관심사가 동등한) 부가적 기능을 독립적으로 모듈화
- 기술 API > JavaEE 기반
- 스프링의 성공요인
- 단순함 > POJO 지향
- 유연성 > 서드파티 프레임워크의 다양함, 스프링을 필요에 맞게 확장하여 자신만의 프레임워크를 만들어 사용할 수 있어야한다.
- 스프링 학습과 활용의 어려움 > 순서대로 스프링의 핵심 가치와 원리에 대한 이해를 가지고 스프링의 기술에 대한 지식과 선택 기준을 정립, 스프링의 적용과 확장이 필요
- 스프링 3.1 기준으로 공부를 하고 있으니 스프링 3.0 > 4.0 > 5.0에 이르기까지 달라진 기능과 추가된 기능을 숙지할 것.
- IoC 컨테이너와 DI
- IoC 컨테이너: 빈 팩토리와 애플리케이션 컨텍스트(interface BeanFactory, interface ApplicationContext는 BeanFactory 상속한 서브인터페이스)
- 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당
- 스프링컨테이너(애플리케이션 컨텍스트)는 단순 DI 작업+엔터프라이즈앱개발 위한 여러 컨테이너 기능이 추가
- 실제 스프링 컨테이너 또는 IoC컨테이너는 ApplicationContext의 구현 클래스 오브젝트
- IoC 컨테이너 이용한 애플리케이션 만들기
- POJO 클래스의 준비
- Plain Old Java Object JavaEE의 무거운 객체를 지양하고 각자 기능에 충실한 객체
public interface Printer { void print(String message); } public class StringPrinter implements Printer { private StringBuffer buffer = new StringBuffer(); public void print(String message) { this.buffer.append(message);} public String toString() { return this.buffer.toString(); }
- 설정 메타정보
- 애플리케이션 컨텍스트는 BeanDefinitionReader에 의해 변환된 BeanDefinition으로 만들어진 메타정보를 담은 오브젝트를 사용해 IoC/DI 작업을 수행
- 빈 아이디, 이름, 별칭/ 클래스/ 스코프/ 프로퍼티 값 또는 참조/ 지연로딩, 우선 빈, 오토와이어, 부모 빈, 빈팩토리 이름 등의 정보를 사용
- 스프링 IoC 컨테이너는 메타정보를 읽은 후 이를 참고하여 빈 오브젝트를 생성, 프로퍼티나 생성자를 통해 DI(Dependency Injection) 작업 수행
- 리스트 1-5 Hello 클래스 빈 등록
- p57부터