엔터프라이즈급 어플리케이션을 구축할 수 있는 가벼운 솔루션이자, One-Stop-Shop(모든 과정을 한번에 해결 할 수 있다.)
원하는 부분만 가져다 사용할 수 있도록 모듈화가 잘 되어 있다.
IoC container
선언적으로 트렌적션을 관리할 수 있다.
완전한 기능을 갖춘 MVC Framework을 제공
AOP 지원
Spring은 Domain 논리 코드와 쉽게 분리될 수 있는 구조로 되어 있습니다.
Container
Container는 instance의 생명주기를 관리한다.
생성된 instance들에게 추가적인 기능을 제공한다.
Servlet class instance 화 하는 것을 tomcat이 대신 해준다.
WAS(tomcat)은 Servlet conatainer를 가지고, Servlet URL을 받으면 Servlet을 메모리에 올린 후 실행해준다.
Container는 보통 instance의 생명주기를 관리하며, 생성된 instance들에게 추가적인 기능을 제공하는 것을 말합니다.
Inversion of Control
개발자는 프로그램의 흐름을 제어하는 코드를 작성한다. 그런데, 이 흐름의 제어를 개발자가 하는 것이 아니라 다른 프로그램이 그 흐름을 제허하는 것을 IoC라 말한다.
Servlet class는 개발자가 만들지만, 그 Servlet의 method를 알맞게 호출 하는것은 WAS
개발자가 만든 어떤 class나 method를 다른 프로그램이 대신 실행하주는 것을 제어의 역전이라 한다.
Dependency Injection
DI는 class사이의 의존관계를 Bean설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말한다.
DI가 적용 안된경우:
개발자가 직접 인스턴스를 생성한다
Spring에서 DI 가 적용 된 경우, container가 instance를 할당해 준다.
Inversion of control
Spring에서 제공하는 IoC/DI container
BeanFactory: IoC/DI에 대한 기본 기능을 가지고 있다.
ApplicationContext: BeanFactory의 모든 기능을 포함하고 개선된 버전
BeanPostProcessor: 컨테이너의 기본로직을 오버라이딩하여 인스턴스화와 의존성 처리 로직 등을 개발자가 원하는 대로 구현 할 수 있도록 합니다.
BeanFactoryPostProcessor: 설정된 메타 데이터를 커스터마이징 할 수 있습니다.
Bean class
스프링에서는 객체를 다룰때 Single tone pattern을 이용한다.
예전에는 Visual한 컴포넌트를 Bean이라고 불렀지만, 근래 들어서는 일반적인 Java 클래스를 Bean클래스라고 보통 부른다.
Bean class의 3가지 특징
기본 생성자를 가진다.
field는 private하게 선언한다.
getter, setter메소드를 가진다.
getName(), setName() 메소드를 name property라 한다.
xml을 이용한 설정
Java Config를 이용한 설정
@Configuration
스프링 설정 클래스를 선언하는 annotation
@Bean
bean을 정의하는 annotation
@Component
component 스캔의 대상이 되는 annotation 중 하나로써 주로 유틸, 기타 지원 클래스에 붙이는 annotation
@Autowired
주입 대상이 되는 bean을 컨테이너에 찾아 주입하는 annotation
Sprint에서 사용하기에 알맞게 @Controller, @Service, @Repository, @Component annotation이 붙어 있는 객체들은 ComponentScan을 이용해서 읽어들여 메모리에 올리고 DI를 주입하도록 하고, 이러한 annotation이 붙어 있지 않은 객체는 @Bean annotation을 이용하여 직접 생성해주는 방식으로 클래스들을 관리하면 편리하다.