Bean 수동 등록

김나영·2023년 6월 27일
0

Spring

목록 보기
13/38

Bean 수동 등록이란?

  • @Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록해줌

  • @Component를 사용하여 Bean을 자동으로 등록하는 게 좋음

    • 비즈니스 로직과 관련된 클래스들은 그 수가 많기 때문에 @Controller, @Service와 같은 애너테이션들을 사용해서 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

Ex)

@Configuration
public class PasswordConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
  • BCryptPasswordEncoder : 비밀번호를 암호화할 때 사용하는 PasswordEncoder의 구현체
@SpringBootTest
public class PasswordEncoderTest {
    @Autowired
    PasswordEncoder passwordEncoder;
    @Test
    @DisplayName("수동 등록한 passwordEncoder를 주입 받아와 문자열 암호화")
    void test1() {
        String password = "Robbie's password";
        // 암호화
        String encodePassword = passwordEncoder.encode(password); // 암호화할 메서드 넣기
        System.out.println("encodePassword = " + encodePassword);
        String inputPassword = "Robbie";
        // 복호화를 통해 암호화된 비밀번호와 비교
        boolean matches = passwordEncoder.matches(inputPassword, encodePassword);
        System.out.println("matches = " + matches); // 암호화할 때 사용된 값과 다른 문자열과 비교했기 때문에 false
    }
}
  • 등록한 passwordEncoder ‘Bean’을 사용하여 문자열을 암호화

  • matches : 내부에서 비교함

    • 입력받아온 평문(암호화 X) : 첫 번째 매개변수, 암호화가 이루어진 패스워드 : 두 번째 매개변수

0개의 댓글