2011-10-21 3 views
1

과 함께 사용하고 있습니다. 여기에 대한 검색이 있었지만 대답을 찾지 못했습니다.@Inject를 일반 유형

내 응용 프로그램에서는 일부 메서드와 속성을 사용하여 컨트롤러에 대한 추상 주 클래스가 있습니다. 그리고 DAO를 자동으로 주입하고 싶습니다.

abstract class AbstractController<E extends AbstractEntity, D extends AbstractDAO<E>> { 

    @Inject 
    private D dao; 

    // getters and setters 
} 

abstract class AbstractDAO<E extends AbstractEntity> { 
    @PersistentContext 
    private EntityManager em; 

    // finds returns E 
} 

// implemenation/usage 

class CarController extends AbstractController<Car, CarDAO> { 
} 

예외를 얻기 :

org.jboss.weld.exceptions.DefinitionException: WELD-001407 Cannot declare an injection point with a type variable: [field] @Inject private AbstractController.dao 

사용 : 글래스 피시 3.1과 JSF 2.1.

임시 해결책이 있습니까?

감사합니다.

+0

'D'는 EJB (관리 빈)입니까? –

+0

EJB 세션 관리 Bean (Stateless 또는 Stateful)을 사용하여 InitialContext.lookup을 사용하여 get 메소드에 인스턴스를 가져올 수 있습니다. 그러나 @Dependent와 같은 주사를 사용하고 싶습니다. 나 한테 더 좋은 생각이있어? – rogeriolino

+0

Guice는 이런 종류의 것을 처리 할 수 ​​있습니다. – ysdx

답변

2

리플렉션이 소스의 일반 선언에 의해 적절한 런타임 유형을 탐지하여 캐스트하는 것이 기술적으로 매우 복잡합니다. 용접은 단순히 그것을지지하지 않으며지지하지 않을 것입니다.

더 나은는 AbstractDAO<E>에 대해 선언 :

private AbstractDAO<E> dao; 

당신은 어쨌든 D에 대해 그것을 선언으로 아무것도 얻을 수 없다.

+0

Weld를 통해 클래스 이름별로 lookup/newInstance/...를 사용하여 인스턴스를 가져올 수 있습니까? – rogeriolino