spring framework dependencies
Bill of Materials
- spring bom(bill of materials)를 import하면 각기 다른 spring framework가 include되는 것을 방지한다.
- 또한, 필요한 spring framework 라이브러리 마다 별도의 버전을 기재할 필요가 없다.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>5.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
IOC
: 제어의 역전
패턴
- Factory method
- 클래스를 생성할 때 그 클래스에 대한 의존성에 대한 책임을 시스템한테 돌리는 것을 말한다.
- 그러면 우리는 의존관계가 있는 클래스들이 어떤 상황인지 알필요가 없다.
- Service locator
- 안티 패턴,, 런타임에서 오류 발견해서 힘들다; 생성자 주입하자ㅋ
- Dependency Injection
The Spring Triangle
- DI
- AOP
- PSA
-> 중심은 POJO
DI
: 의존성을 주입하는 행위, 그 행위를 담당해주는 것이 IOC container
- spring에서 ioc 역할을 하는 모듈을 spring container, di container라고 부른다.
- (ioc는 제어의 역전, 그러니까 클래스를 생성할 때 그 클래스에 대한 의존성에 대한 책임을 시스템한테 돌리는 것을 말한다. 그러면 우리는 의존관계가 있는 클래스들이 어떤 상황인지 알필요가 없다. -> factory method pattern)
- DI 컨테이너에 의해서 런타임 시에 의존 오브젝트를 사용할 수 있도록 그 래퍼런스를 전달받는 과정이 마치 메소드를 통해 DI 컨테이너가 A에게 주입해주는 것과 같다고 해서 이를 의존관계 주입
PSA (Portable Service Abstraction)
: 하나의 추상화로 여러 서비스를 묶으둔 것
ApplicationContext
Spring IoC Container
- instantiating, configuring, and assembling the beans
- by reading configuration metadata
라이프 사이클 콜백
- spring ioc 컨테이너가 ioc 컨테이너를 만들고 그 안에 빈을 등록할 때 사용하는 인터페이스들
SpringBean
- spring ioc 컨테이너가 관리하는 자바 객체를 빈이라고 한다.
- ApplicationContext.getBean()으로 얻어질 수 있는 객체
- 즉, 빈은 ApplicationContextrk 만들어서 그 안에 담고있는 객체
빈 등록 방법
Component Scanning
-
@ComponentScan
- 어느 지점부터 컴포넌트를 찾으라고 알려줌
- @SpringBootApplication 내부에서 동작함.
- 해당 어노테이션이 붙어있는 클래스가 있는 패키지에서부터 모든 하위 패키지의 모든 클래스를 훑어보며 @component 어노테이션이 붙은 클래스를 찾는다.
-
@Component
빈 설정파일에 직접 빈 등록
- 빈 설정파일은 xml과 자바 설정파일로 작성 가능
- 클래스에 @Configuration 애노테이션, 크 안에 @Bean 애노테이션 사용
@Configuration
public class SampleConfiguration {
@Bean
public SampleController sampleController() {
return new SampleController;
}
}
그러면 sampleController()에서 리턴되는 객체가 IoC 컨테이너 안에 빈으로 등록된다.
- 사실 @Configuration 애노테이션 안에서 @Component를 사용하기 때문에 @ComponentScan의 스캔 대상이 된다.
Bean Scope
싱글톤
- spring 컨테이너에서 한 번 생성됨. 컨테이너가 사라질 때 빈도 제거됨.
- 생성된 하나의 인스턴스는 single beans cache에 저장. 해당 bean에 대한 요청과 참조가 있으면 개시된 객체 반환
- 대상 클래스에 @Scope("singleton")
프로토타입
- 모든 요청에서 새로운 객체를 생성
- gc에 의해 bean이 제거됨
- 보통 쓰기가 많고나 상태가 노출되지 않은 객체일 때 비싱글톤이 좋다.
Bean Wiring
Field Injection
Setter Injection
Constructor Injection