꼬물꼬물
의존관계 자동 주입 [롬복과 최신 트랜드] 본문
개발을 해보면, 대부분이 다 불변이고 생성자에 final 키워드를 사용하게 된다.
생성자도 만들고, 주입 받은 값을 대입하는 코드도 만들어야한다 -> 필드 주입처럼 편리하게 사용할 수 없을까?
기본코드
@Component
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired // 생성자가 하나라면 @Autowired 생략가능
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
롬복 적용 dependencies
//lombok 설정 추가 시작
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
//lombok 설정 추가 끝
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
//lombok 라이브러리 추가 시작
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
//lombok 라이브러리 추가 끝
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
@Getter
@Setter
@ToString
public class HelloLombok {
private String name;
private int age;
public static void main(String[] args) {
HelloLombok helloLombok = new HelloLombok();
helloLombok.setName("hello");
helloLombok.setAge(25);
String name = helloLombok.getName();
System.out.println(helloLombok);
}
}
- getter와 setter를 자동으로 만들어준다.
- 생성자 관련도 지원해준다.
@RequiredArgsConstructor를 사용하면 final이 붙은 객체를 넣은 생성자를 자동으로 만들어준다.
// 만들어지는 자동 코드
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
최종 적용 코드
@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
}
🐤 롬복이 자바의 어노테이션 프로세서라는 기능을 이용해 컴파일 시점에 생성자 코드를 자동으로 생성해준다.
✔️ 정리
- 생성자를 딱 한개 두고, @Autowired를 생략하는 방법을 주로 사용한다.
- 여기에 Lombok 라이브러리의 @RequiredArgsConstructor 를 함께 사용하면 기능은 다 제공하면서 코드는 깔끔하게 사용할 수 있다.
'스터디 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
의존관계 자동 주입 [조회한 빈 모두 사용하기, 자동/수동 기준] (1) | 2022.09.30 |
---|---|
의존관계 자동 주입 [@Autowired 필드 명, @Qualifier, @Primary, 애노테이션 생성] (1) | 2022.09.30 |
의존관계 자동 주입 [옵션 처리, 생성자 주입] (0) | 2022.09.28 |
의존관계 자동 주입 [다양한 의존관계 주입 방법] (0) | 2022.09.25 |
컴포넌트 스캔 [필터, 중복 등록과 충돌] (0) | 2022.09.22 |