써먹는 웹개발
[Spring] 의존관계 자동주입 간단히 처리하는 방법 (lombok) 본문
728x90
반응형
0. 의존성 주입
- 외부로부터 필요한 객체를 받아서 사용하는 방법
- 객체간의 결합도를 줄이고 코드의 재활용성을 높여준다.
(직접 생성자를 생성하면 100개가 필요하면 100개를 수정해야됨)
1. 의존관계 주입 방법
1) 생성자 주입
1
2
3
4
5
6
7
8
9
10
11
|
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;
}
}
|
cs |
2) 수정자 주입 (Setter 주입)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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;
}
}
|
cs |
3) 필드 주입
1
2
3
4
5
|
@Component
public class OrderServiceImpl implements OrderService{
@Autowired private MemberRepository memberRepository;
@Autowired private DiscountPolicy discountPolicy;
}
|
cs |
※ 단, 필드 주입은 외부에서 변경 및 테스트를 할 수 없다.
2. 생성자(수정자) 주입과 필드 주입의 강점(소스가 간편하면서 테스트도 가능한) 둘다 들어있는 방법
- lombok > RequiredArgsConstructor
1
2
3
4
5
6
|
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
}
|
cs |
※ 1번 소스 참고 : https://mangkyu.tistory.com/125
참고하면 좋은 글 : https://velog.io/@wlsdud2194/what-is-di
아래 에러도 의존관계 자동주입을 하지 않아서 생겼던 에러
The bean 'testRepository', defined in kr.go.nis.nsis.fisp.portal.repository.es.testRepository defined in @EnableJpaRepositories declared on PortalApplication, could not be registered. A bean with that name has already been defined in kr.go.nis.nsis.fisp.portal.repository.es.testRepository defined in @EnableElasticsearchRepositories declared on ElasticsearchConfig and overriding is disabled. |
728x90
반응형
'Server > Spring' 카테고리의 다른 글
Comments