백기선 님이 YouTube에 올린 영상 중에 @RequiredArgsConstructor 관한 것이 있다.
장점
- 생성자 주입을 사용하는 경우에는 중복해서 작성해야 하는 슈가 코드를 줄일 수 있다.
- 역으로 리팩터링하여 주입이 더 이상 안필요할 때 세 군데를 수정해야 할 것을 하나의 수정으로 해결 할 수 있다.
@Service
public class NamopayService {
private final NamopayUrls namopayUrls;
private final StoreCache storeCache;
private final NamopayApi namopayApi;
private final PaymentRepository paymentRepository; // 미사용필드
private final StoreProvider storeProvider;
private final PaymentObjectMapper paymentObjectMapper;
@Autowired
public NamopayService(NamopayUrls namopayUrls,
StoreCache storeCache,
NamopayApi namopayApi,
PaymentRepository paymentRepository, // 추가 삭제1
StoreProvider storeProvider,
PaymentObjectMapper paymentObjectMapper) {
this.NamopayUrls = NamopayUrls;
this.storeCache = storeCache;
this.namopayApi = namopayApi;
this.paymentRepository = paymentRepository; // 추가 삭제2
this.storeProvider = storeProvider;
this.paymentObjectMapper = paymentObjectMapper;
}
단점
- 처음 보는 사람이라면 잘 이해가 안갈 수 있다.
- 상속 받은 클래스에서는 적용이 안된다.
- 인터페이스를 구현(implements)하는 경우에는 가능하다.
- @Value 값으로 사용하려고 하는 경우 실수로 Bean으로 주입을 받으려는 현상을 겪을 수 있다.
@Component
@RequiredArgsConstructor
public class PayloadCache {
@Value("${membership.redis.expire}")
private final Duration expireTimeout; // private Duration expireTimeout; 가 되어야 한다.
private final RedisHelper redisHelper;
private final Cryptography cryptography;
에러 메시지
*************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of constructor in com.yanolja.payment.dao.cache.repository.MembershipPayloadCache required a bean of type 'java.time.Duration' that could not be found. Action: Consider defining a bean of type 'java.time.Duration' in your configuration.
'Programing > OpenSource' 카테고리의 다른 글
[Spring Boot] 2.0.2 -> 2.1.4 업데이트 후 TC 깨짐 (0) | 2019.05.15 |
---|---|
[Gson] List 타입 추론 방법 feat Super Type Tokens (0) | 2019.05.07 |
[npm] npm이 npm을 설치하다. (0) | 2019.02.09 |
[Xamarin.Mac] 데스크탑 애플리케이션 개발 (0) | 2019.02.08 |
[curl] curl -I 는 HTTP HEAD 였다. (0) | 2019.02.01 |