[Spring]Bean을 수동으로 등록하는 방법

김세림·2024년 5월 22일

Spring

목록 보기
7/9
post-thumbnail

Bean을 수동으로 등록하는 방법


Bean 자동등록

보통 @Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록해준다.

프로젝트 규모가 커질수록 등록할 Bean들이 많아지기 때문에 자동등록을 사용하면 편리하다.
또한, 비즈니스 로직과 관련된 클래스들은 그 수가 많기 때문에 @Controller, @Service와 같은 애너테이션을 사용하여 Bean으로 등록하고 관리하면 개발 생산성에 유리하다.

또한 우리가 사용하는 @Autowired 또한 다른 Bean의 참조를 받아 주입받는 방식으로 의존관계를 자동적으로 주입하는 컴포넌트 스캔방식이다.

Bean 수동등록

그렇다면 수동등록은 언제, 왜 사용할까??

기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들을 수동으로 등록하는 것이 좋다.

  • 공통 로그처리와 같은 비즈니스 로직을 지원하기 위한 부가적이고 공통적인 기능들을 기술 지원 Bean이라고 부르며 수동등록한다.
  • 비즈니스 로직 Bean보다는 수가 적기 때문에 수동등록하여도 부담스럽지 않다.
  • 또한 수동등록된 Bean에서 문제가 발생했을 때 해당 위치를 파악하기 쉽다는 장점이 있다.

Bean 수동등록 방법

@Configuration
public class PasswordConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

예를 들어 비밀번호를 암호화하는 코드가 있다고 했을 때 위에서 보이는 것과 마찬가지로 Bean으로 등록하고자하는 객체를 반환하는 메서드를 선언하고 @Bean을 설정한다.
Bean을 등록하는 메서드가 속한 해당 클래스에는 @Configuration을 설정한다.

이를 통해 Spring 서버가 뜰 때 Spring IoC컨테이너에 Bean으로 저장된다.

// 1. @Bean 설정된 메서드 호출
PasswordEncoder passwordEncoder = passwordConfig.passwordEncoder();

// 2. Spring IoC 컨테이너에 빈 (passwordEncoder) 저장
// passwordEncoder -> Spring IoC 컨테이너
  • Bean 이름은 Bean이 설정된 메서드명이다.
    (위에서는 public PasswordEncoder passwordEncoder() {..} 으로 메서드명을 호출하였기 때문에 passwordEncoder이 Bean의 이름이 된다.)

주의할 점

수동등록과 자동등록이 있다면, 수동등록이 우선순위를 가지게 되니 주의하자!
오류도 나지않고 수동등록된 것이 우선적으로 나오게 된다!!

0개의 댓글