써먹는 웹개발

[Spring] 의존관계 자동주입 간단히 처리하는 방법 (lombok) 본문

Server/Spring

[Spring] 의존관계 자동주입 간단히 처리하는 방법 (lombok)

kmhan 2021. 8. 11. 12:45


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
반응형


Comments