본문 바로가기

WINK-(Web & App)/Spring Boot 스터디

[2025 1학기 스프링부트 스터디] 정다은 #4주차

반응형

이번강의는

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

입니다!

 

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

일단  MemberController 라는 이름의 컨트롤러 파일 하나를 생성해주었습니다.

 

@controller -> 멤버 컨트롤러 객체를 생성해서 스프링에 넣어두고 스프링이 관리를 한다고 합니다.

스프링 컨테이너에서 스프링빈이 관리된다 << 이렇게 표현한다고 하네요 (@.@)

 

private final MemberService memberService = new MemberService();

스프링이 관리를 하게되면 전부 스프링컨테이너에 등록하고 스프링컨테이너로부터 받아서 쓰도록 바꾸어야한다.

new로 선언할 경우 -> 멤버 컨트롤러 말고 다른 컨트롤러에서 서비스를 가져다 쓸 수 있는 문제 발생

 

그래서! 이렇게 쓰는 것 보다는

스프링 컨테이너에 등록을 하고 쓰자. 

 

    private final MemberService memberService;

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

@Autowired -> 스프링이 스프링 컨테이너에 있는 멤버 스프링과 연결시켜줌

 

오류 발생!!!! -> 이전에 만든 멤버 서비스가 컨테이너에 등록되어있지 않음

 

이렇게 @Service 를 넣어줍시다 (스프링 컨테이너에 올려줘야합니다)

 

이렇게 Repository 파일에서 @Repository 도 작성해줍니다.

 

컨트롤러(외부요청) 서비스(비즈니스 로직)  레포지토리(데이터 저장)

정형화되어있는 패턴!!!

 

연결해 줄 때 @Autowired를 사용해주면 됩니다. => 의존관계 주입

 

스프링 빈을 등록하는 2가지 방법

  • 컴포넌트 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록하기

@Component 애노테이션이 있으면 스프링 빈으로 자동등록

@Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문

 

스프링 컨테이너에 스프링을 등록할 때 , 기본적으로 유일하게 단 한가지만 등록(싱글톤)

 

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

이렇게 코드 작성해주면 됩니당

@Configuration 클래스 안에서 @Bean 매서드로 빈을 직접 등록!!

 

Dependency Injection 방법

  • 필드 주입, setter 주입, 생성자 주입

요즘은 생성자를 통한 주입을 권장한다고 하네요

 

어렵네요 

반응형