[SpringBoot] Bean 등록 - @Component, @Configuration, @Bean

해니·2024년 1월 30일
0

SpringBoot

목록 보기
10/24
post-thumbnail


Bean 등록 방법

@Component

  • 자동으로 스프링 컨테이너에 빈을 등록한다.
  • 스프링의 컴포넌트 스캔 기능이 @Component 어노테이션이 있는 클래스를 자동으로 찾아서 빈으로 등록한다.
  • @Component 하위 어노테이션으로 @Configuration, @Controller, @Service, @Repository 등이 있다.

@Bean, @Configuration

  • 수동으로 스프링 컨테이너에 빈을 등록한다.
  • 스프링에서는 일반적으로 컴포넌트 스캔을 사용해 자동으로 빈을 등록하는 방법을 이용하지만, 아래와 같은 경우에 직접 빈을 등록해준다.
    • 개발자가 직접 제어가 불가능한 라이브러리를 활용할 때
    • 애플리케이션 전범위적으로 사용되는 클래스를 등록할 때
    • 다형성을 활용하여 여러 구현체를 등록해주어야 할 때
  • 메소드 이름으로 빈 이름이 결졍되므로, 중복된 빈 이름이 존재하지 않도록 주의해야한다.
  • 1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 @Configuration을 명시해 주어야 싱글톤이 보장된다.

📌 @Bean(initMethod)
어노테이션의 initMethod 속성에 초기화 작업에 사용할 메서드 이름을 작성한다.



@Configuration에 적용되는 프록시 패턴

  • CGLib으로 프록시 패턴을 적용해 수동으로 등록하는 스프링 빈이 반드시 싱글톤으로 생성됨을 보장하기 위해 @Configuration을 사용한다.
    • @Bean이 있는 메소드를 여러 번 호출하여도 항상 동일한 객체를 반환하여 싱글톤을 보장한다.
  • proxyBeanMethod
    • @Configuration(proxyBeanMethod=true): 생성된 Bean들은 싱글톤을 보장받는다. (기본 값이 true)
    • @Configuration(proxyBeanMethod=false) : 생성된 Bean들은 싱글톤을 보장받지 못하게 된다. 즉, 동일한 클래스의 Bean을 여러 개 생성하면, 각각이 서로 다른 인스턴스로 만들어진다.




프록시 패턴

  • 원본 객체를 대리하여 대신 처리하게 함으로써 로직의 흐름을 제어하는 행동 패턴
  • 클라이언트가 대상 객체를 직접 쓰는게 아니라 중간에 프록시(대리인)을 거쳐서 쓰는 코드 패턴
  • 서 대상 객체(Subject)의 메소드를 직접 실행하는 것이 아닌, 대상 객체에 접근하기 전에 프록시(Proxy) 객체의 메서드를 접근한 후 추가적인 로직을 처리한뒤 접근한다.

개발자가 직접 제어 가능하다면 @Component,
직접 제어가 불가능하다면 @Configuration, @Bean을 사용한다.






출처

[Spring] @Configuration 안에 @Bean을 사용해야 하는 이유, proxyBeanMethods - (2/2)
[Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component 차이 및 비교 - (1/2)
[디자인패턴] 프록시패턴(Proxy Pattern)
Spring bean LifeCycle
스프링 빈 생명주기(Bean Lifecycle) 메서드와 실행 순서
프록시(Proxy) 패턴 - 완벽 마스터하기
[Spring] @Configuration과 프록시 패턴 (w. proxyBeanMethod)

profile
💻 ⚾️ 🐻

0개의 댓글