우주먼지
article thumbnail

💡 자바 코드로 직접 스프링 빈 등록하기

 

이전 시간에 등록했던 서비스,레포의 컴포넌트 스캔 대상 어노테이션(Autowired,Service,Repository)를 지워준다

멤버 컨트롤로에 있는 Autowired,Controller 어노테이션은 그대로 둔다

실무에서는 보통 정형화된 컨트롤러,서비스,레포 같은 코드는 컴포넌트 스캔을 사용

 

  • @Bean 어노테이션으로 빈에 MemberService 생성자 등록
  • 동일하게 memberRepository도 생성자 등록
  • memberService에서 memberRepository를 참조하도록 넣어줌

hello.hellospring.SpringConfig 클래스 생성


💡 Defendency Injection (의존성 주입)

 

DI의 3가지 방식

의존관계가 실행 중 동적으로 변하는 경우는 거의 없으니 생성자 주입을 추천함

  • 필드 주입
  • Setter 주입
  • 생성자 주입

 

@Autowired를 통한 DI는 'helloController', 'MemberService' 와 같이 스프링이 관리하는 객체에서만 동작한다.

스프링 빈 등록이 아닌 내가 직접 생성한 객체에서는 동작 X

 

정형화 되어 있지 않거나 상황에 따라 구현클래스를 변경해야 할때, 설정을 통해 스프링 빈으로 등록

 

강의 초반, 레포를 임시로 구현체를 사용해 레포를 가상으로 설정하고 레포를 변경한다고 했는데,

기존 운영중인 코드를 100% 보존하면서 레포변경을 가능하게 할 수 있다

위에서 빈에 등록시킨 멤버레포 코드에 보면 리턴되는 객체 명만 바꿔주면 됨

즉, 스프링 빈에 등록이 안되어있으면 @Autowired 자체가 동작하지 않음

profile

우주먼지

@o귤o

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그