티스토리 뷰

Spring

스프링 입문 강의 정리 #4

코딩하는 브레드 2023. 4. 18. 13:25

인프런 김영한 강사님의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 듣고 정리한 내용입니다.

 

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

섹션 4. 스프링 빈과 의존관계

1. 컴포넌트 스캔과 자동 의존관계 설정

➡️ MemberController가 MemberRepository와 MemberService를 사용할 수 있게 의존관계 설정

MemberController.java

package com.example.hellospring.controller;

import com.example.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class MemberController {

    private final MemberService memberService;

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

 

@Autowired이란?

스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 연결

 

의존성 주입 (Dependency Injection)

객체 의존관계를 외부에서 넣어주는 것

 

하지만 실행 시 문제 발생: MemberService 스프링 빈으로 등록 X

 

@Component

스프링 빈으로 자동 등록

➡️ @Controller, @Service, @Repository는 다 @Component를 포함하고 있어서 스프링 빈 자동 등록 가능

 

MemberService.java

package com.example.hellospring.service;

import com.example.hellospring.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class MemberService {

    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository) { // DI (생성자 주입)
        this.memberRepository = memberRepository;
    }
}

- 필드 주입

@Autowired private MemberService memberService;

- 생성자 주입

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

 

 

MemoryMemberRepository.java

package com.example.hellospring.repository;

import org.springframework.stereotype.Repository;

@Repository
public class MemoryMemberRepository implements MemberRepository {
..
}

 

스프링 빈 등록

 

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

➡️ @Service, @Repository, @Autowired 제거

(@Autowired는 스프링이 관리하는 객체에서만 동작)

 

SpringConfig.java

package com.example.hellospring;

import com.example.hellospring.repository.*;
import com.example.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// 스프링 빈에 직접 등록
@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

'Spring' 카테고리의 다른 글

스프링 입문 강의 정리 #6  (0) 2023.05.22
스프링 입문 강의 정리 #5  (0) 2023.04.18
스프링 입문 강의 정리 #3  (0) 2023.04.15
스프링 입문 강의 정리 #2  (0) 2023.04.11
스프링 입문 강의 정리 #1  (0) 2023.04.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함