Spring Framework 란 엔터프라이즈급 자바 어플리케이션 개발에서 필요로 하는 경량형 어플리케이션 프레임워크 이다.
스프링 프레임워크는 J2EE[Java 2 Enterprise Edition] 에서 제공하는 대부분의 기능을 지원하기 때문에, J2EE를 대체하는 프레임워크로
자리잡고 있다.
스프링은 확장이 쉽고 그 사용목적이 분명하며 여러가지 특징적인 기능을 제공한다.
(1)경량 컨테이너
= 스프링은 객체를 담고 있는 컨테이너로써 자바 객체의 생성과 소멸과 같은 라이프사이클을 관리하고, 언제든 필요한 객체를 가져다 사용할 수 있도록 해준다.
(2)DI[Dependency Injection] 패턴 지원 (DI : 의존성 주입)
= 별도의 설정 파일을 통해 객체들간의 의존 관계등을 설정할 수 있다. 그로인해 객체들간의 느슨한 결합을 유지하고 직접 의존하고 있는 객체를 굳이 생성하거나 검색할 필요성이 없어진다.
(3)AOP[Aspect Oriented Programming] 지원 (AOP : 측면 지향 프로그래밍 )
= AOP는 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법이다. 이는 문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통관심 사항을 기준으로 프로그래밍 함으로써 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 한다.
스프링은 자체적으로 프록시 기반의 AOP를 지원하므로 트랜잭션이나 로깅, 보안등과 같이 여러 모듈에서 공통적으로 필요하지만 실제모듈핵심은 아닌 기능들을 분리하여 각 모듈에 적용할 수 있도록 한다.
(4)POJO[Plain Old Java Object] 지원 (POJO : 평범한 오래된 자바 객체 )
= POJO는 말그대로 일반적은 자바객체를 말한다. 평범한 말그대로 단순히 자바일 뿐이다. 일반적인 자바객체를 칭하기 위해 만든 별칭같은 개념이다.
(5)IoC[Inversion of Control] (IoC : 제어의 반전 )
= IoC는 스프링 프레임워크가 갖고 있는 핵심적인 기능이다. 본디 자바의 객체 생성 및 의존관계에 있어 모든 제어권은 개발자에게 있었다. 하지만, 서블릿과 EJB가 나타나면서 기존의 제어권이 서블릿 컨테이너 및 EJB컨테이너에게 넘어가기 된다.
하지만 모든 객체의 제어권이 넘어간 것은 아니고 서블릿,EJB에 대한 제어권을 제외한 나머지 객체 제어권은 개발자들이 담당하고 있다.
스프링 프레임워크에서도 객체에 대한 생성과 생명주기를 관리할 수 있는 기능을 제공하고 있는데 이런 이유로
스프링 컨테이너[Spring Container] 또는 iOC 컨테이너 라고 부르기도 한다.
이러한 특징들 외에도 트랜잭션 처리를 위한 일관된 방법을 제공하고, 다양한 API와의 영속성을 지원(JDBC, iBATIS, 하이버네티으, JDO, JPA 등..)한다. 또 다양한 API와의 연동을 지원하기도 한다(JMS, 스케쥴링 등등). 엔터프라이즈급 어플리케이션등을 개발할 때 필요한 다양한 API들을 설정 파일을 통해 쉽게 연동하여 사용할 수 있다.
이러한 스프링 프레임워크의 특징들은 J2EE를 대체하여 조금 더 객체들에 대한 효율성을 증대하기 위한 방편으로 쓰여진다.