SpringBoot) @Bean, @Component, @Autowired

YIHN·2024년 5월 20일

SpringBoot

목록 보기
10/10
post-thumbnail

@Bean(메서드 레벨)

  • 메서드에 붙여 해당 메서드를 통해 반환되는 객체를 Bean으로 관리할 때 사용

@Component(클래스 레벨)

  • 클래스에 붙여 해당 클래스 타입을 기반으로 빈을 관리

    @Repository, @Service, @Controller 등의 어노테이션은 @Component를 이미 포함한다.


@Autowired를 이용한 의존성 주입

  1. 생성자 주입
  2. 수정자(Setter) 주입, 혹은 메서드 주입
  3. 필드 주입

1. 생성자 주입

클래스의 생성자에 @Autowired를 붙여 해당 클래스 타입의 필드들을 찾아 등록하도록 한다.
👇🏻등록된 Class2의 빈을 알아서 찾아와 주입한다. 생성자가 하나일 경우 어노테이션을 붙이지 않아도 해당 생성자를 자동 주입의 대상으로 인식한다.

2. 수정자(Setter) 주입, 메서드 주입

메서드에 @Autowired를 붙여 해당 클래스 타입의 빈을 찾아와 의존성을 주입한다.
cf. 생성 시점 이후에 메서드를 호출하여 의존성을 변경할 수 있으나,
필드가 외부에서 변경될 수 있다는 점과 의존성이 필요한 시점에 주입되지 않을 수 있다는 위험이 존재

3. 필드 주입

필드에 @Autowired를 붙여 의존성을 주입
cf. 수정자 주입과 마찬가지로 필드가 final이 아니므로 변경될 여지가 있다. 메서드와 필드 주입 시의 메서드, 필드의 접근제어자는 private도 가능


생성자 주입을 사용하는 이유

생성자 주입은 수정자 주입, 필드 주입보다 여러 장점을 가진다.
1. 필수적인 의존성의 주입 시점을 보장할 수 있다.
2. 필드를 final로 선언이 가능하여 외부에서의 변경 가능성을 낮춘다.
3. 의존성 주입이 한 곳(생성자)에서만 일어나므로 필요한 의존성을 한곳에서 모아서 확인할 수 있다.
4. 순수 자바 코드로의 테스트가 용이하다.
5. Bean의 순환 참조 문제를 방지할 수 있다.

profile
오늘도 YIHN

0개의 댓글