티스토리 뷰

Spring 에는 많은 모듈들이 있지만 그중에서 주로 다룰 것은 아래와 같다.

Spring Modules

  • Boot
  • Cloud
  • Data
  • Batch
  • Security

또한 Spring 의 핵심 동작 원리를 알기 위해 배울 것은 아래와 같다.

  • IoC/DI : 제어의 역전과 의존성 주입
  • AOP : (Aspect) 관점 중심 프로그래밍
  • PSA : 이식 가능한 추상화

IoC

일반 자바프로젝트에서는 new 이런식으로 새 객체를 만들어줘야하고 개발자가 직접 관리해줘야하지만
Spring에서는 Spring Container 가 객체들을 자동으로 관리해주며 알아서 싱글톤 패턴으로 만들어준다.

DI

아래는 Spring 프로젝트안에 들어간 Base64Encoder Class 이다.
class 선언부위에 @Component 어노테이션을 붙여주면 Spring Container 에게 Spring Bean 으로 만들어서 관리하라고 해주는 모습이다.

Spring Container 에서 관리되는 객체들을 Bean 이라고 한다.

Spring에서 Bean 을 주입받을 수 있는 곳은 변수, 생성자, set 메소드가 있다.

package com.example.ioc

import org.springframework.stereotype.Component
import java.util.*

@Component
class Base64Encoder : IEncoder {
    override fun encode(message: String): String {
        return Base64.getEncoder().encodeToString(message.toByteArray())
    }
}

위와 같이 @Components 어노테이션을 붙여주면 IntelliJ 에서는 아래 사진과 같이 자동으로 관리/주입될 객체를 인식하여 보여준다.

// 하나의 class 에서 여러개의 Bean 을 등록하겠다고 명시해줄 때 사용한다.
@Configuration
class AppConfig{

    @Bean("base64Encode")
    fun encoder(base64Encoder: Base64Encoder): Encoder{
        return Encoder(base64Encoder)
    }

    @Bean("urlEncode")
    fun encoder(urlEncoder: UrlEncoder): Encoder{
        return Encoder(urlEncoder)
    }

}
댓글