(프레임워크 : 내부에서 모든 것을 해결할 수 있도록 제공하는 틀)
경량 컨테이너로서 자바 객체를 직접 관리
각 객체의 라이프 사이클 관리, 스프링으로부터 필요한 객체를 얻어온다.
POJO 기반의 구성
구현을 위해 특정 인터페이스 구현, 상속을 받을 필요 없음 -> 기존에 존재하는 라이브러리 지원에 용이, 객체가 가벼움
IoC(Inversion of Control) 지원
컨트롤의 제어권이 사용자가 아닌 프레임워크에게 있음 -> 필요에 따라 스프링에서 사용자의 코드 호출
DI(Dependency Inversion) 을 통한 객체 간의 관계 구성
각 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 연결시켜줌
AOP(Aspect-Oriented Programming) 지원
트랜잰션, 로깅, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리 가능
영속성과 관련된 다양한 서비스 지원
iBatis나 하이버네이트 등 완성도가 높은 데이터베이스 라이브러리와 연결할 수 있는 인터페이스 제공
확장성이 높음
많은 라이브러리가 스프링에서 지원, 스프링에서 사용되는 라이브러리 별도로 분리 용이
Spring Core(Core Container)
핵심 기능 제공
코어 컨테이너의 주요 컴포넌트는 BeanFactory(Factory Pattern 구현)
Spring Context
국제화된 메시지, 애플리케이션 생명주기 이벤트 등과 같은 다수의 엔터프라이스 서비스를 제공
템플릿 프레임워크와의 통합 지원
Spring AOP
설정 관리 기능을 통해 aspect 지향 프로그래밍 기능을 Spring Framework와 직접 통합 -> 모든 객체에서 AOP 가능
객체에 트랜잭션 관리 서비스 세공
(EJB 컴포넌트에 의존하지 않고도 선언적 트랜잭션 관리를 애플리케이션과 결합 가능)
Spring DAO
Spring JDBC DAO 추상 레이어는 다른 DB 벤더들의 예외 핸들링, 오류메시지를 관리하는 예외 계층 제공
JDBC에 의한 DB 엑세스 지원, 트랜잭션 관리의 기반
Spring ORM
프레임워크는 여러 ORM(Object/Relation Mapping) 프레임워크에 플러그인 되어 Object Relational 툴을 제공
Spring Web Module
애플리케이션 컨텍스으 모듈 상단에 구현되어, 웹 기반 애플리케이션 컨텍스트 제공
다중 요청을 핸들링, 요청 매개변수를 도메인 객체로 바인딩하는 작업을 수월하게 함
Spring MVC Framework
완전한 기능을 갖춘 MVC 구현