2017-10-25 5 views
0

나는 자바를 배우지만 다음 코드 조각을 찾았습니다. 나는 혼란 스럽다. bind(X.class).to(X.class);은 무엇입니까?hk2 : 왜 bind (X.class) .to (X.class)

import org.glassfish.hk2.utilities.binding.AbstractBinder; 
public class ApplicationBinder extends AbstractBinder { 
    @Override 
    protected void configure() { 
     bind(X.class).to(X.class); 
    } 
} 

감사

답변

1

당신은 당신의 서비스가 DI (의존성 주입) 시스템에서 발견 할에 당신이 원하는 방법을 구성하고 있습니다. bind(Service).to(Contract)은 기본적으로 Service을 주사 가능한 서비스로 제공하고이를 Contract으로 "보급"하려고한다고 말합니다. "광고하다"는 것은 당신이 그것을 주입 할 수 있기를 원하는 것입니다. 예를 들어, ServiceUserRepositoryImpl 일 수 있고, ContractUserRepository (인터페이스) 일 수 있습니다. 이걸로 당신은 오직 당신이 광고 할 수있는대로 @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 인스턴스가됩니다.

+0

하지만 내 소식은 해당 클래스를 가져 오거나 해당 클래스에서 DI를 수행하는 것이 더 낫습니다. – BAE

+0

"가져 오기 또는 DI"란 무엇을 의미하는지 확신 할 수 없습니다. vs DI를 수동으로 인스턴스화하는 것을 의미합니까? 이를 위해 DI에 관한 기사를 읽을 수 있으며 혜택을 볼 수 있습니다. –