FireDrago
[Spring] 스프링 의존관계 설정 본문
intro
스프링에서는 의존관계를 스프링 빈을 통해 관리한다. 스프링 빈을 생성하는 두가지 방법에 대해 알아보자
자바에서는 스프링 빈을 등록할때 '싱글턴' 방식을 사용한다.
※ 의존관계란? ※
- 한 객체가 다른 객체를 '사용'하는 것
- 약한 의존 : 다른 객체의 인터페이스에 의존하는 것 이상적인 의존 (유지보수, 확장성 용이, 의존성 역전 원칙)
- 강한 의존 : 다른 객체의 구체적 타입에 의존하는 것
※ 싱글턴 패턴 ※
- 특정 클래스의 인스턴스를 오직 하나만 생성하는 디자인 패턴
- 스프링 빈으로 스프링 컨테이너에 등록되면 하나의 인스턴스가 유지된다.
컴포넌트 스캔
@Controller, @Service, @Repository + @Autowired 애너테이션을 사용하는 방법

- @Controller, @Service, @Repository 등은 내부적으로 @Component 애너테이션을 포함한다. @Component 가 있으면 스프링은 자동으로 '스프링 컨테이너'에 '스프링 빈'으로 등록한다.
- @Autowired 는 스프링 빈이 생성될때 해당 스프링 빈을 찾아서 주입한다. (Dependency Injection) 위의 예시에서 MemberService를 주입하도록 되어있는데, 만약 MemberService가 스프링 컨테이너에 없다면 오류가 발생한다.
(MemberService 역시 스프링 빈으로 등록되어 있어야 한다. 내가 직접 생성한 객체에서 @Autowired 동작하지 않는다)
※ DI 종류 ※
1. 생성자 : 위의 예시처럼 생성자에 @Autowired 붙이는 방법, 가장 권장된다.
2. setter : setter 메서드에 @Autowired 붙이는 방법, 빈 생성 이후에도 호출될 가능성이 있다.
3. 필드주입 : 필드앞에 직접 @Autowired 붙이는 방법,
(@Autowired private MemberService memberService )
자바 코드로 직접 빈 등록
@Configuration 애너테이션과 @Bean 애너테이션을 이용하는 방법

- 상황에 따라 의존관계가 달라질때, 변경이 유용한다.
( MemoryMemberRepository 말고 다른 객체로 변경이 쉽다. )
1. 컴포넌트 스캔
- @Controller, @Service, @Repository 등의 어노테이션을 사용하면 스프링이 자동으로 빈으로 등록한다.
- @Autowired를 사용하여 빈을 주입할 수 있다.
2. 자바 코드로 직접 빈 등록
- @Configuration 어노테이션을 사용한 설정 클래스에서 @Bean 어노테이션을 사용하여 빈을 등록한다.
이 글은 인프런 김영한님의 스프링 입문 강의를 바탕으로 작성했습니다.
'프로그래밍 > Spring' 카테고리의 다른 글
| [Spring] 스프링 기본 원리 (0) | 2024.01.04 |
|---|---|
| [Spring] AOP (0) | 2024.01.02 |
| [Spring] 회원관리 예제 (0) | 2023.12.29 |
| [Spring] 웹 개발의 기초 (0) | 2023.12.28 |
| [Spring] Spring에서 Mybatis 사용하기 (0) | 2023.09.04 |
