@ComponentScan에 의해서 Component가 자동으로 Scan이 되어 해당 class를 Bean으로 등록해줌
- 일반적으로는 Component Annotation 혹은 우리가 계쏙 쓰는 3 Layer Annotation(Controller,Service,Repository)이런 에노테이션을 활용해서 bean을 자동으로 등록하는 게 좋음
- 왜냐하면 프로젝트가 커질수록 등록해야 할 bean들이 많아지기 때문에 자동 등록이 편함
- 비지니스 로직과 관련된 클래스들은 수가 굉장히 많아서 컨트롤러나 서비스 같은 에노테이션을 사용해서 빈으로 등록하여 관리하면 개발 생산성에서 굉장히 유리함
- bean 수동 등록은??
- 기술적인 문제나, 공통적인 관심사를 관리하는 객체들을 수동으로 등록하는 것이 좋다
- 공통 Lof 처리나, 같은 비즈니스 로직을 지원하기 위한 부가적이고 또 공통적인 기능들을 기술 지원 bean이라고 부르고, 이런 것들을 수동 등록한다
비밀번호를 암호화할 때 사용하는 객체를 한번 bean으로 수동 등록해보자
package com.sparta.springauth;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.password.PasswordEncoder;
@SpringBootTest
public class PasswordEncoderTest {
@Autowired //2) 사용해서 passwordEncoder 주입받아오고 있음.
PasswordEncoder passwordEncoder; //1)passwordEncoder bean으로 등록했으니깐 주입받아와서 사용해야 됨
@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); //첫번째는 평문, 두번째는 암호화된 String
System.out.println("matches = " + matches); // 암호화할 때 사용된 값과 다른 문자열과 비교했기 때문에 false
}
}