@값 필드, 롬복 및 생성자 주입에 대한 모범 사례?
저는 자바 스프링 애플리케이션을 개발하고 있습니다.응용프로그램에 .yml 구성 파일을 사용하여 구성된 일부 필드가 있습니다.해당 필드에 @Value 주석을 사용하여 해당 값을 가져오려고 합니다.저도 현장 주입보다는 시공자 주입이라는 베스트 프랙티스를 사용하고 싶지만 수동보다는 롬복을 사용하여 시공자를 작성하고 싶습니다.이 모든 것을 한 번에 할 수 있는 방법이 있습니까?예를 들어, 이것은 작동하지 않지만 내가 하고 싶은 것과 유사합니다.
@AllArgsConstructor
public class my service {
@Value("${my.config.value}")
private String myField;
private Object myDependency;
...
}
이 경우, 제가 원하는 것은 롬복이 제 의존성만 설정하는 생성자를 생성하고 제 구성 파일에서 myField를 읽도록 하는 것입니다.
감사합니다!
필요합니다@RequiredArgsConstructor
와 마크myDependency
최종적으로이 경우 Lombok은 인수로 '필수' 최종 필드를 기반으로 생성자를 생성합니다. 예:
@RequiredArgsConstructor
@Service
public class MyService {
@Value("${my.config.value}")
private String myField;
private final MyComponent myComponent;
//...
}
이는 다음과 같습니다.
@Service
public class MyService {
@Value("${my.config.value}")
private String myField;
private final MyComponent myComponent;
public MyService(MyComponent myComponent) { // <= implicit injection
this.myComponent = myComponent;
}
//...
}
여기에는 생성자가 하나뿐이므로 스프링 주입MyComponent
주석을 명시적으로 사용하지 않습니다.
롬복 버전 1.18.4 이상을 사용하고 있는지 확인합니다.원하는 주석을 lombok.config 파일에 추가해야 합니다.
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Value
강의 내용은 다음과 같습니다.
@AllArgsConstructor(onConstructor = @__(@Autowired))
public class MyService{
@Value("${my.config.value}")
private String myField;
private Object myDependency;
}
다음은 롬복 생성 클래스입니다.
public class MyService {
@Value("${my.config.value}")
private String myField;
private Object myDependency;
@Autowired
@Generated
public MyService(@Value("${my.config.value}") final String myField, final Object myDependency) {
this.myField = myField;
this.myDependency = myDependency;
}
PS: /src/main/java 폴더 아래에 lombok.config 파일이 있는지 확인합니다./src/main/resources에 추가하려고 했지만 작동하지 않았습니다.
Lombok에서 가져온 응답 - 생성자 입력 매개 변수에 필드의 주석을 유지합니다.
언급URL : https://stackoverflow.com/questions/52321988/best-practice-for-value-fields-lombok-and-constructor-injection
'programing' 카테고리의 다른 글
단일 Lodash 함수를 가져오는 방법? (0) | 2023.08.27 |
---|---|
MariaDB에서 SQL 쿼리 "ALTER USER"를 수정하시겠습니까? (0) | 2023.08.27 |
여러 JavaScript 파일을 하나의 JS 파일로 결합 (0) | 2023.08.27 |
NaN(" ")(공백이 있는 문자열)이 동일한 이유는 무엇입니까? (0) | 2023.08.27 |
주석 기반 Spring Boot Application에서 플러그인 아키텍처 구현 (0) | 2023.08.27 |