최근 Google Guice@ImplementedBy
에서 사용할 수 있는 주석 에 대해 읽었습니다 . 이를 통해 프로그래머는 인터페이스와 구현 간의 바인딩을 지정하여 향후 의존성 주입에 사용할 수 있습니다. JIT (Just-In-Time) 바인딩 의 예입니다 .
다음 구문을 사용하여 모듈에서 명시 적 바인딩을 정의하는 데 꽤 익숙합니다.
bind(SomeInterface.class).to(SomeInterfaceImplementation.class);
설명서에 따르면 이는 다음 @ImplementedBy
주석 사용과 동일합니다 .
@ImplementedBy(SomeInterfaceImplementation.class)
public interface SomeInterface {
//method declarations
}
내가 볼 수있는 유일한 이득은 코드가 약간 짧다는 것입니다. 동시에이 접근법에는 동일한 문서에서 지적한 단점이 있습니다.
@ImplementedBy
신중하게 사용하십시오 . 인터페이스에서 구현으로 컴파일 타임 종속성을 추가합니다.
이러한 의존성은 많은 경우 문제가되지 않지만 개인적으로 코드 냄새라고 생각합니다.
@ImplementedBy
주석을 사용할 가치가 있는 사용 사례는 무엇입니까 ?
한 가지 가능한 방법은 라이브러리 또는 프레임 워크의 코드에서 사용하는 것 같습니다. 문서에서 설명했듯이 주석은 명시 적 바인딩에 의해 쉽게 무시되는 기본 바인딩을 제공 할 수 있습니다 .
유형이
bind()
명령문 에 모두 있고 (첫 번째 인수로)@ImplementedBy
주석 이있는 경우bind()
명령문이 사용됩니다. 주석은 바인딩으로 재정의 할 수 있는 기본 구현 을 제안합니다 .
이렇게하면 라이브러리 개발자로서 사용자에게 클라이언트 코드의 어딘가에 사용자 정의 할 수있는 즉시 사용 가능한 바인딩을 제공 할 수 있습니다.
이것이 주석이 존재하는 유일한 이유입니까? 아니면 내가 놓친 것이 있습니까? 라이브러리 / 프레임 워크가 아닌 일부 비즈니스 로직을 처리하는 응용 프로그램 인 코드에서 코드를 사용하여 얻을 수 있습니까?