DI(Dependency Injection, 의존성 주입) : 설정 파일이나 어노테이션을 통해 객체 간의 의존 관계를 설정하여 개발자가 직접 객체 간의 의존 관계를 생성할 필요가 없다.
AOP(Aspect Oriented Programming, 관점 지향 프로그래밍) : 트랜잭션, 로깅, 보안 등 공통으로 필요로 하는 기능의 경우 해당 기능들을 분리하여 관리한다.
POJO(Plain Old Java Object) : 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어 개발이 쉬우며, 기존 라이브러리의 지원이 용이하다.

애플리케이션에서 필요한 객체들의 생성, 설정 등의 처리 방법을 관리하는 컨테이너다.
모든 스프링 관련 모듈은 이 코어 컨테이너 기반으로 구축된다.
스프링은 AOP계층을 통해 애스팩트 지향 프로그래밍(AOP) 을 풍부하게 지원한다.
AOP는 주로 애플리케이션 전체에 걸친 관심사와 각 객체 간의 결합도를 낮추는데 용이하다.
JDBC나 데이터베이스에 연결하는 계층으로, 트랜잭션에 해당하는 기능을 담당하여 영속성 프레임워크(MyBatis)와 연결을 담당한다.
이 모듈들을 이용하면 데이터 베이스 관련 코드를 깔끔하고 간단하게 만들 수 있고 데이터 베이스 리소를 닫지 않아서 발생할 수 있는 문제를 예방할 수 있다.
스프링의 특징을 활용하여 객체 간의 결합도를 낮추는 MVC 관련 모듈들을 제공해 준다.
스프링에서 애플리케이션 테스트를 위한 모듈을 제공한다.
스프링 애플리케이션 컨텍스트에서 빈을 로드하고 이 컨텍스트에 있는 빈을 이용하여 테스트 코드를 작성할 수 있다.