당신은 당신의 서비스가 DI (의존성 주입) 시스템에서 발견 할에 당신이 원하는 방법을 구성하고 있습니다. bind(Service).to(Contract)
은 기본적으로 Service
을 주사 가능한 서비스로 제공하고이를 Contract
으로 "보급"하려고한다고 말합니다. "광고하다"는 것은 당신이 그것을 주입 할 수 있기를 원하는 것입니다. 예를 들어, Service
은 UserRepositoryImpl
일 수 있고, Contract
은 UserRepository
(인터페이스) 일 수 있습니다. 이걸로 당신은 오직 당신이 광고 할 수있는대로 @Inject UserRepository
일 수 있습니다. 이 이점은 programming to an interface과 함께 제공되는 모든 이점입니다.
예 여기
UserRepository
interface UserRepository {
List<User> findAll();
}
class UserRepositoryImpl implements UserRepository {
@Override
public List<User> findAll() {
return Arrays.asList(new User("username"));
}
}
@Path("users")
class UserResource {
@Inject
private UserRepository repository;
@GET
public List<User> getUsers() {
return repository.findAll();
}
}
class JerseyApp extends ResourceConfig {
public JerseyApp() {
register(UserResource.class);
register(new AbstractBinder() {
@Override
public void configure() {
bind(UserRepositoryImpl.class)
.to(UserRepository.class);
}
});
}
}
는 UserResource
주입된다. DI 시스템이 주입하면 실제로는 UserRepositoryImpl
인스턴스가됩니다.
하지만 내 소식은 해당 클래스를 가져 오거나 해당 클래스에서 DI를 수행하는 것이 더 낫습니다. – BAE
"가져 오기 또는 DI"란 무엇을 의미하는지 확신 할 수 없습니다. vs DI를 수동으로 인스턴스화하는 것을 의미합니까? 이를 위해 DI에 관한 기사를 읽을 수 있으며 혜택을 볼 수 있습니다. –