Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- n타일링2
- 이펙티브코틀린
- 10026번
- OS
- Operating System
- HTTP
- 김영한
- Spring
- TCP/IP
- 열혈 tcp/ip 프로그래밍
- Four Squares
- 운영체제
- C#
- 윤성우 저자
- 스프링 입문
- BOJ
- 제프리리처
- 우아한 테크 세미나
- 우아한레디스
- 토마토
- 에러핸들링
- inflearn
- Operating System.
- Window-Via-c/c++
- C++
- redis
- 열혈 TCP/IP 소켓 프로그래밍
- FIFO paging
- 스프링 핵심 원리
- 2475번
Archives
- Today
- Total
나의 브을로오그으
#7-1. [스프링 핵심 원리-기본편] - 의존관계 주입 방법 본문
다양한 의존관계 주입 방법
- 생성자 주입
- 수정자 주입(setter 주입)
- 필드 주입
- 일반 메서드 주입
생성자 주입
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
- 이름 그대로 생성자를 통해 의존성 주입
- 생성자 호출 시점에 딱 1번만 호출되는 것을 보장함.
- 주로 불변, 필수 의존관계에 사용
- 생성자가 1개면 @Autowired를 생략 가능
수정자 주입(setter)
@Component
public class OrderServiceImpl implements OrderService {
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Autowired
public void setDiscountPolicy(DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
}
- 선택, 변경 가능성이 있는 의존관계 주입
※참고 : @Autowired의 기본 동작은 주입할 대상이 없으면 오류가 발생한다. 주입할 대상이 없어도 동작하게 하려면 @Autowired(required = false)로 지정하면 된다.
자바 빈 프로퍼티 규약 예시
class Data {
private int age;
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
※참고 : 자바 빈 프로퍼티, 자바에서는 과거부터 필드의 값을 직접 변경하지 않고, setXXX, getXXX라는 메서드를 통해서 값을 읽거나 수정하는 규칙을 만들었는데, 그것이 자바빈 프로퍼티 규약이다.
필드 주입
@Component
public class OrderServiceImpl implements OrderService {
@Autowired
private MemberRepository memberRepository;
@Autowired
private DiscountPolicy discountPolicy;
}
- 필드에 바로 집어넣는 방법
- 다만 필드주입은 스프링에서 더이상 권장하지 않음.
- 코드는 간결하지만, 변경이 불가능해서 테스트하기 힘들다.
- 필드주입을 할거면 테스트 코드에서만 사용하길 권장한다.
일반 메서드 주입
@Component
public class OrderServiceImpl implements OrderService {
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void init(MemberRepository memberRepository, DiscountPolicydiscountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
- @Autowired만 붙여주면 의존성주입을 해준다. 다만 이 방법은 거의 쓰지 않는다.
당연한 이야기이지만 @Component를 통해 스프링 빈으로 등록된 클래스만이 @Autowired가 가능하다.
'Spring' 카테고리의 다른 글
#7-3. [스프링 핵심 원리-기본편] - 생성자 주입 (0) | 2022.07.28 |
---|---|
#7-2. [스프링 핵심 원리-기본편] - 옵션 처리 (0) | 2022.07.27 |
#6. [스프링 핵심 원리-기본편] - 컴포넌트 스캔 (0) | 2022.07.26 |
#5-2. [스프링 핵심 원리-기본편] - @Configuration과 싱글턴 (0) | 2022.07.21 |
#5-1. [스프링 핵심 원리-기본편] - 싱글턴 패턴 (0) | 2022.07.21 |