2016-07-15 2 views
2

를 통해 기존 콩에 @Named 규정을 추가 모호한 의존성 : 나는 EL 식을 통해 해당 서비스에 액세스하려면, 내 웹 애플리케이션에서CDI 나는 CDI 빈 종속성 JAR 파일에서 구현이 @Produces

@ApplicationScoped 
public class MyService { 
    public String doSomething() {...} 
} 

을, 그러므로 나는 @Named 주석을 주어야한다. 그러나 해당 코드를 변경할 권한이 없기 때문에 MyService 구현에 주석을 추가 할 수 없습니다.

그러므로 나는

이것은

용접 001,409 결과

public class MyServiceProducer { 
    @Inject MyService myService; 

    @Produces @Named("myService") 
    public MyService produceNamedInstance() { 
    return myService; 
    } 
} 

같은 프로듀서를 만드는 시도 - @Default 예선와 형이면 MyService에 대한 모호한 의존 ... 가능한 의존성 : - 한정자가있는 Managed Bean [클래스 ... MyService] - 한정자 [@Default @Named @Any]가 선언 된 생산자 메서드 [myService] [...]

원본 소스 코드를 건드리지 않고 @Named 주석을 추가하려면 어떻게해야합니까?

답변

1

오류는 @Inject MyService을 나타냅니다. 기본적으로 @Produces MyService을 통해 두 번째 빈을 정의했습니다. 주사위 인 경우 MyService이지만 정확히 어느 것이 정확히 @Inject을 통해 주입하려고했는지 명확히하지 않았습니다. 따라서 CDI는 혼란스러워서이 모호한 종속성 오류를 발생시킵니다.

이미 자동 생성 된 Bean에 대해 다른 제작자를 만드는 대신 기존 Bean을 확장 한 다음 이름을 지정해야합니다. scope 이미 @Inherited 것을 당신이 그것을 다시 정의 할 필요가 없습니다 있도록해야 명물

@Named("myService") 
public class MyNamedService extends MyService { 
    // 
} 

.

+0

고마워, 그 속임수를했습니다 :) – Florian

+0

당신은 오신 것을 환영합니다. – BalusC