티스토리 뷰

개발/TIL

9.30 Spring Container, DI

욱스다 2022. 10. 1. 21:05

1.계획

자바 클래스 복습

김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 절반 학습

 

2.배운점

Compoment 어노테이션을 통한 스프링 컨테이너 등록방법

@Controller
@Service
@Repository

위 어노테이션들은 Component를 사용해 스프링 컨테이너에 올린다.

@Component

controller - service - repository의 의존관계가 있을때 의존방법

@Autowired로 생성자를 선언하면 컨테이너에 등록된 클래스가 주입된다. (DI)

// Component로 올려줌
// 어노테이션 생성시 컨테이너에 올라감
@Controller
public class MemberController {

    private final MemberService memberService;
    // 가져다 쓸 클레스를 선언후 생성자를 써주면 컨테이너에 등록이 되면서 이 생성자를 호출해서
    // 동일하게 가져다쓸 클레스에도 컨테이너에 올려주는 작업이 필요함.
    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

 자바 코드로 스프링 Bean 등록방법

import hello.hellospring.repository.MemberRepository;
import hello.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();
    }

}

DI(Dependency Injection)

DI에는 필드 주입, setter주입, 생성자 주입이 있는데

생성자주입은 제일 권장되는 방식이라고 한다.

싱클톤 방식으로 객체가 주입되서

@Controller
public class MemberController {

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

필드주입 -> 필드에 직접 @Autowired를 쓰는방법 

그런데 문제가 발생했을때 교체하기에 좋지않다고 한다.

@Autowired private MemberService memberService;

setter주입 -> public하게 노출되어 다른 개발자가 상태값을 변경할 수 있어서 위험하다.

@Controller
public class MemberController {

    private MemberService memberService;

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

3.코멘트

스프링의 일부분?인 IOC, DI를 이해하기위해서는 클래스, 메소드, 생성자를 잘 이해해야 스프링에서 사용되는 DI가 어떻게 생성되서 주입되는지에 대해 이해할 수 있는거같다. 기본 소양을 갖춰야 다음으로 나아갈 수 있는것처럼 계단식 학습법같은 느낌! 좋은 입문 강의를 제공해주셔서 감사합니다. 앞으로 더 정진하자!

'개발 > TIL' 카테고리의 다른 글

10.5 Entity  (0) 2022.10.05
10.4 HTTP, JPA  (0) 2022.10.04
9.29 알고리즘  (0) 2022.09.29
9.28 클래스  (0) 2022.09.28
9.27 혼공자  (0) 2022.09.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
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
글 보관함