Spring Ch 1. IoC 컨테이너(4) - Profile과 Property


Profile

  • 프로파일으로 런타임 환경을 설정할 수 있다.
  • 빈들을 하나의 환경으로 묶어 선언함으로서 테스트 환경에서 테스트를 수행하고 신속하게 배포 환경으로 전환할 수 있다.
  • @Component 어노테이션으로 등록된 빈들은 DefaultProfile에 존재한다.
  • @Profile 어노테이션으로 프로파일을 등록할 수 있고 !, &, |의 논리 설정을 사용할 수 있다.
자세히 보기

Spring Ch 1. IoC 컨테이너(3) - 빈의 스코프


빈의 스코프

싱글톤

  • 애플리케이션 전반에 걸쳐 빈의 인스턴스가 오직 하나만 존재한다.
  • Autowired에 의해 주입된 싱글톤 객체는 다른 객체에 주입된 싱글톤 객체와 동일한 객체이다.

프로토타입

  • @Scope(“prototype”)으로 프로토타입을 선언한다.
  • 프로토타입 객체는 매 호출마다 객체가 초기화된다.
자세히 보기

Spring - 중복된 빈 등록에 대한 처리


스프링 의존 객체 선택

  • 컴포넌트 Annotation은 싱글톤 범위로 등록되며 같은 타입의 빈이 다른 클래스에서 등록된 경우 에러가 발생한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
public interface Repository {
}
@Repository
public class Repository2 implements Repository{
}
@Repository
public class Repository3 implements Repository{
}
@Service
public class Service{
@Autowired //등록된 빈이 중복되어 에러 발생
Repository repository;
}
자세히 보기

Spring Ch 1. IoC 컨테이너(2) - Component와 Autowired


Component

  • Component-scan에 의해 Bean으로 등록되는 개발자가 직접 작성한 클래스.
  • @Controller, @Service, @Repository는 @Component를 확장한 annotation이며 이러한 Annotation이 등록된 컴포넌트들은 컨테이너에 의해 의존성이 주입된다.
  • ComponentScan에는 아래와 같이 다양한 설정들이 있다.

basePackages

  • 기본적으로 컴포넌트 스캔은 basePackage로 등록된 클래스를 기준으로 하여 작동한다.
  • 컴포넌트 스캔은 등록된 클래스가 존재하는 폴더부터 하위폴더로 진행되므로 상위 폴더에 대해서는 스캔 되지 않는다.
  • basePackage의 기본값은 component-scan을 사용하는 configuration 설정 파일의 폴더.
자세히 보기

Spring Ch 1. IoC 컨테이너(1) - 빈과 IoC


Dependency

  • 하나의 객체가 다른 객체를 변수로 가지고 있거나 파라미터로 전달, 혹은 메소드를 호출하는 것을 ‘의존한다’라고 표현한다.
  • 객체 A가 객체 B를 의존하고자 할 때 객체를 직접 선언하여 사용하나, 만약 객체 A가 객체 B 대신 객체 C를 사용하는 객체로 사용하기 위해서는 C에 의존하고 객체 A와 비슷한 객체 D를 선언해야 한다.

Dependency Inversion Principle

  • 의존하는 객체는 재사용할 수 없다. 객체를 재사용하기 위해서는 의존성을 제거하여야 한다.
  • 의존 대상이 되는 객체를 추상화하여 의존성을 제거할 수 있다. 이를 의존성 역전 원리(Dependency Inversion Principle)라고 한다.
자세히 보기