Java 코드로 Spring Bean을 직접 등록하는 방법
서비스 아래에 SpringConfig 클래스를 만듭니다.


@Configuration 주석을 입력하십시오!

@Bean 주석은 스프링 빈을 등록한다는 의미입니다!
그래서 아래의 MemberService를 호출하여 Spring Bean에 등록합니다.
이때 MemberService에는 memberRepository가 매개변수로 포함됩니다.
@Bean 주석을 입력하고
Spring Bean에 MemberRepository를 등록합니다.
MemberRepository는 이 시점에서 인터페이스이므로 실제 구현인 MemoryMemberRepository가 새롭습니다.
* 상호 작용: 다른 클래스를 작성할 때 뼈대를 제공하고 다른 클래스 간의 중개 역할을 하는 일종의 추상 클래스를 말합니다.
* 인터페이스 역할: 개발 코드를 직접 변경하지 않고 사용 중인 객체만 변경할 수 있도록!
MemberController는 Spring Bean에 의해 관리되기 때문에 Configuration에서 직접 등록 및 관리되지 않습니다.
기존 구성 요소 검색 방법을 사용할 수 있습니다.
DI(의존성 주입)

– 생성자 주입: 종속성은 실행 중에 동적으로 거의 변경되지 않으므로 생성자 주입을 권장합니다.

– 필드 인젝션(@Autowired는 생성자가 제거되더라도 바로 입력) : 필드 인젝션 사용 시 중간에 전환할 수 있는 방법이 없습니다.
* final : Java에서 불변성을 보장하기 위해 결정적인 키워드가 제공됩니다.
클래스나 변수에 final을 붙인다는 것은 그것이 처음 정의된 상태가 변경되지 않는다는 것을 보장한다는 것을 의미합니다.
Java의 변수는 기본적으로 변경 가능하지만 참조 값이 변경되지 않도록 변수에 final 키워드를 추가하여 불변성을 보장할 수 있습니다.

– Setter 주입: 누군가가 MemberController를 호출하면 setMemberServive가 한번 설정되면 setter가 공개되기 때문에 중간에 변경할 필요는 없지만 공개적으로 노출된다는 단점이 있다.
(Alt + Insert 키로 setter를 삽입하고 @Autowired를 추가합니다.)
실제로는 주로 표준화된 컨트롤러, 서비스 및 리포지토리에서 구성 요소 스캔을 사용합니다. 그리고 표준화되지 않았거나 상황에 따라 구현 클래스를 변경해야 하는 경우 Spring Bean-Through 구성으로 등록됩니다.
현재 표준화되지 않은 경우나 상황에 따라 구현 클래스가 변경되는 경우는?

데이터 저장소가 과거에 선택되지 않았기 때문에 먼저 인터페이스로 구현 클래스를 변경하도록 설계되었습니다.
적어두고 이어가는 경우가 있었다. 따라서 처음에는 MemoryMemberRepository로 구현되었으며 나중에 대체될 예정입니다.
따라서 하나도 건드리지 않고 기존 운영 코드를 변경할 수 있는 방법이 있습니다.
이를 통해 Spring Bean을 Java 코드에 직접 등록할 수 있습니다.

즉, MemoryMmeber를 다른 저장소로 변경할 수 있습니다.
이는 Spring Bean을 Java 코드에 직접 등록하는 이점입니다.
@Autowired를 통한 DI는 helloController 및 memberService와 같은 Spring 관리 객체에서만 작동합니다.
(즉, @Autowired는 Spring Beans로 등록된 클래스에서만 사용할 수 있습니다!)
봄콩은 안되고 제가 직접 만든 물건은 안되네요.
(무료) Spring 소개 – 코드로 Spring Boot, Web MVC, DB 액세스 기술 배우기 – Infrun | 강의
Spring 초심자도 예제 작성을 통해 Spring 웹 애플리케이션 개발의 모든 것을 빠르게 배울 수 있습니다., – 강의소개 | 하부 구조
www.inflearn.com
