2012-07-25 3 views
2

나는 인터페이스가 DAO<T>이고 일반 구현은 (GenericDAO<T> implements DAO<T>)입니다.Guice의 GenericDao

나는 이런 식으로 뭔가를 좋아하는 것 : 가능

public interface UserDao extends Dao<User> { 
// code 
} 

// module 
bind(UserDao.class).to(GenericDao.class); 

인가? 나는 당신이 GenericDaoUserDao을 결합 수 있다고 생각하지 않습니다이 작업 ...

+0

중복 가능성 (http://stackoverflow.com [일반 구현 Guice를 사용하여 주입한다]/questions/4238919/inject-generic-implementation-guice 사용) –

답변

2

를 얻을 수 없다, (나는 특정 userdao 구현을 만들 didnt는) 자동적으로 GenericDao하는 다오의 분사 작업에 나섰고. GenericDaoUserDao을 구현하지 않으므로 둘 다 공통 조상을 가지고 있습니다. GenericDao 클래스에 필요한 모든 메서드가있는 경우 별도의 UserDao 클래스가 필요하지 않습니다.

bind(new TypeLiteral<DAO<User>>(){}).to(new TypeLiteral<GenericDAO<User>>(){}); 

클라이언트 클래스는 다음 DAO<User>에 따라 달라집니다, 그들은 GenericDAO<User>을받을 것이다 : 당신은 제프가 작성했습니다 같은 바인딩이 필요합니다. User 엔터티 관련 작업이 필요한 경우 GenericDao<User>을 확장해야합니다.

나는 topic에 관한 게시물을 작성했습니다. 특히 게시물 하단을 참조하십시오.

3

실제로 제네릭 클래스를 사용하려면 궁극적으로 T의 유형을 선택해야합니다. 사용 결국 각 타입의 경우는 예를 들어 (T위한 Integer 사용)과 같은 결합을 만들어야의

bind(new TypeLiteral<DAO<Integer>>(){}) 
    .to(new TypeLiteral<GenericDAO<Integer>>(){}); 
관련 문제