DEV/Spring

@Configuration을 활용한 @Bean 등록 방법

Bi3a 2023. 11. 23. 00:57

728x90

Spring boot 기초 깨부시기

함께 보면 좋을 포스팅

 

[Spring] @Autowired 활용 의존성 주입, Spring Bean (2 / 2)

이전 포스팅에서 이어집니다. 의존성 주입(Dependency Injection) (1 / 2) 의존성 주입 객체가 필요로 하는 어떤 것을 외부에서 전달해주는 행위를 말하며, 포괄적인 의미로서 두 객체 간의 관계를 외부

doinitright.tistory.com


 

@Configuration, @Bean을 활용한 빈 등록 방법은
@Component, @Service 등과 같은 컴포넌트를 통한 빈 등록 방식과 상이합니다.
오늘은 해당 내용에 대해 학습해보겠습니다.

 

@Configuration

자바 기반의 설정 클래스를 나타내기 위해 사용됩니다.
해당 어노테이션을 사용 시 스프링 컨테이너는 해당 클래스를 참조해 빈을 생성하고 구성합니다.

 

사용 방법 

클래스 위에 어노테이션을 붙여 해당 클래스는 빈을 생성하고 구성하는 설정 클래스임을 명시합니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
...
}

 

@Bean

@Configuration 이 명시된 클래스 안에서 @Bean 어노테이션을 통해 빈을 정의합니다.
@Bean 어노테이션이 적용된 메소드의 반환 값을 빈으로 등록합니다.

 

사용 방법

메소드 위에 @Bean 어노테이션을 붙여 사용하며, 매소드의 리턴 값을 빈 객체로 등록됩니다.
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig {
        
        @Bean // IOC 컨테이너에 빈은 맵 형태로 등록된다 : <메소드명, 객체>
        PasswordEncoder passwordEncoder(){
            return new BCryptPasswordEncoder();
        }
    }

 

사용 특징

  • @Bean을 사용한 빈 객체는 IOC 컨테이너에 <메소드 이름(key), 메소드 반환 객체(value)> 의 맵 형태로 저장, 등록
    • 빈의 이름은 기본적으로 메소드의 이름입니다. (따라서 일반적으로 DI를 진행할 필드 객체의 변수명을 메소드명으로 일치시킵니다.
    • 동일한 타입의 빈 객체가 없을 시에는 위의 메소드명과 변수명을 일치시키지 않아도 매칭됩니다. (권장 X)
    • @Bean(name ="name")으로 이름 변경이 가능합니다.
  • @Component로 선언되는 방식과 다르게 빈 객체의 유지보수가 쉽습니다.
    • 주입할 빈 객체에 대해 @Configuration, @Bean을 통해 하나의 클래스로 관리하고 있기 때문

 

@Configuration, @Bean에 대해 알아보았습니다.


많은 관심 부탁드립니다.