스프링 정리

바퀴달린 개발자·2021년 11월 15일
0

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

: 제어의 역전

패턴

  1. Factory method
    • 클래스를 생성할 때 그 클래스에 대한 의존성에 대한 책임을 시스템한테 돌리는 것을 말한다.
    • 그러면 우리는 의존관계가 있는 클래스들이 어떤 상황인지 알필요가 없다.
  2. Service locator
    • 안티 패턴,, 런타임에서 오류 발견해서 힘들다; 생성자 주입하자ㅋ
  3. Dependency Injection

The Spring Triangle

  1. DI
  2. AOP
  3. 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

  1. @ComponentScan

    • 어느 지점부터 컴포넌트를 찾으라고 알려줌
    • @SpringBootApplication 내부에서 동작함.
    • 해당 어노테이션이 붙어있는 클래스가 있는 패키지에서부터 모든 하위 패키지의 모든 클래스를 훑어보며 @component 어노테이션이 붙은 클래스를 찾는다.
  2. @Component

    • 실제로 찾아서 빈으로 등록할 클래스

빈 설정파일에 직접 빈 등록

  • 빈 설정파일은 xml과 자바 설정파일로 작성 가능
  • 클래스에 @Configuration 애노테이션, 크 안에 @Bean 애노테이션 사용
@Configuration
public class SampleConfiguration {
    @Bean
    public SampleController sampleController() {
        return new SampleController;
    }
}

그러면 sampleController()에서 리턴되는 객체가 IoC 컨테이너 안에 빈으로 등록된다.

  • 사실 @Configuration 애노테이션 안에서 @Component를 사용하기 때문에 @ComponentScan의 스캔 대상이 된다.

Bean Scope

  • 애플리케이션 구동 시 JVM 안에서 스프링이 bean마다 하나의 객체를 생성하는 것을 의미함.

  • 그래서 우리는 스프링을 통해서 bean을 제공받으면 언제나 주입받은 bean은 동일한 객체라는 가정하에서 개발을 한다.

img

싱글톤

  1. spring 컨테이너에서 한 번 생성됨. 컨테이너가 사라질 때 빈도 제거됨.
  2. 생성된 하나의 인스턴스는 single beans cache에 저장. 해당 bean에 대한 요청과 참조가 있으면 개시된 객체 반환
  3. 대상 클래스에 @Scope("singleton")

프로토타입

  1. 모든 요청에서 새로운 객체를 생성
  2. gc에 의해 bean이 제거됨
  3. 보통 쓰기가 많고나 상태가 노출되지 않은 객체일 때 비싱글톤이 좋다.

Bean Wiring

Field Injection

  • @Autowired
  • @Qualifier
    • 주입될 bean을 지정함.

Setter Injection

Constructor Injection

0개의 댓글