[Spring] Spring bean 등록

노유성·2023년 7월 8일
0
post-thumbnail

컴포넌트 스캔, 자동 의존관계 설정

MemberController.java

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

MemberService.java

@Service
public class MemberService {
    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

MemoryMemberRepository.java

@Repository
public class MemoryMemberRepository implements MemberRepository {
  

먼저 모든 class에 대해서 위에 Controller, Service, Repository annotation을 붙힌다. 여기서 대제목이 component 스캔인데 이 이유는 위 3가지의 annotaion을 들어가보면 모두 Component annotation을 포함하고 있기 때문이다.

Spring이 처음에 빌드를 시작할 때 Component annotation을 포함하고 있는 class들을 찾아서 Spring bean으로 등록한다.

DI를 주입할 때도 이전 챕터에서 생성자 주입을 이용한다고 하였는데 이 경우에도 결국엔 Autowired annotation을 이용해서 등록해야 한다.

자바 코드로 직접 등록하기

@Configuration
public class SpringConfig {
    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }
    @Bean
    public MemoryMemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

class에 Configuration annotation을 지정하고 class 내부에 Bean anntation을 이용해서 Spring bean으로 등록한다. 기존에 Autowired를 이용해서 의존관계를 주입하던 방식도 위에서는 annotation을 이용하지 않고 생성자로 등록한다.

Controller는 어쩔 수 없게도 Spring이 알아서 관리하기 때문에 Configuration 하위에 등록하지 않는다. 그러므로 Controller는 그대로 둔다.

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}
profile
풀스택개발자가되고싶습니다:)

0개의 댓글