발전기 게임하기
내가 롬복을 잘못 이해한 방법
Satyarth Agrahari ・ 11월 13 '20 ・ 2분 읽기
#java
#programming
그래서 이번에는 같은 실수를 하고 싶지 않아서 이 게시물로 돌아왔습니다.
lombok
및 dependency injection
에 익숙한 사람들을 위한 간단한 연습부터 시작하겠습니다. 다음 블록에서 생성된 코드는 무엇이라고 생각하십니까?@RequiredArgsConstructor(onConstructor = @__(@Inject))
public class Test {
@NonNull @Named("testString") private final String testString;
}
나는 대부분의 사람들이 (롬복에 의해 생성된 코드를 본 사람) 이것이 다음과 같이 번역될 것이라고 추측할 것이라고 생각합니다.
public class Test {
@Generated
@Inject
Test(@NonNull @Named("testString") String testString) {
if (testString == null) {
throw new NullPointerException("testString is marked non-null but is null");
} else {
this.testString = testString;
}
}
}
하지만 그랬다면 우리는 여기 없었을 텐데...
그래서 그것이 실제로 생성하는 것을 보자
public class Test {
@Generated
@Inject
Test(@NonNull String testString) {
if (testString == null) {
throw new NullPointerException("testString is marked non-null but is null");
} else {
this.testString = testString;
}
}
}
그러나 그것은 이상합니다. @Named로 내 필드에 주석을 달았음을 분명히 알 수 있습니다. 따라서 종속성 주입 중에 이름 검색이 없는 경우 주입할 올바른 종속성을 어떻게 찾을 수 있습니까?
결과적으로 lombok은 해당 동작을 구현하기에는 너무 복잡해지기 때문에 모든 주석을 존중하지 않습니다. 자세한 내용은 github 문제에서 확인할 수 있습니다12.
이제 우리는 이것이 사실이라는 것을 알았으니 문제는 이것을 해결하는 방법입니다.
lombok.copyableAnnotations += com.google.inject.name.Named
파일에 lombok.config
를 추가할 수 있으며 롬복은 생성자를 생성할 때 이를 복사하려고 합니다. public class Test {
@Inject
Test(@NonNull @Named("testString") final String testString) {
this.testString = testString;
}
}
나는 몇 가지 이유 때문에 2를 선호합니다.
Reference
이 문제에 관하여(발전기 게임하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/satylogin/playing-the-generator-game-2bk4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)