2016-09-19 2 views
2

클래스 B에 setter 및 getter가있는 클래스 A, B, C가 있다고 가정합니다. 클래스 A에서 클래스 B를 사용하고 싶습니다 (클래스 B에서 참을 설정하여 설정 작업 수행). 클래스 C (클래스 B에서 getter 작업 수행). 하지만 문제는 내가 직면 한 문제는 동일한 Class B 객체에 대한 get 수행이 false가 아닌 C 클래스에 인쇄되어야한다는 것입니다. 그러므로 기본적으로 그들은 모두 @Dependent 될 것입니다 - 코드 조각은클래스에서 @Inject 어노테이션 사용시 오류가 발생했습니다.

Class A { 
    @Inject 
    B b; 
    //Setting true 
    b.set(true); 
} 

Class B { 
    boolean b; 
    //Setter 
    //Getter 
} 

Class C { 
    @Inject 
    B b; 
    // 
    boolean ball=b.get(); 
    Log.info(ball) //False is getting printed instead of true why is this!! 
} 
+1

주입 된'b'는 어떻게 생성합니까? 일부 코드 또는 구성 파일에 의해? 'b'를 어떻게 설정합니까? [최소한의 완전하고 검증 가능한 예제를 만드는 방법] (http://stackoverflow.com/help/mcve)을 읽어보십시오. –

+0

그것은 CDI 빈입니다. 우리는 설정 파일을 사용하지 않습니다. 의존성 주입은 아무것도하지 않습니다. 설정 메소드를 사용하여 b를 true로 설정하십시오. –

답변

2

문제는, 당신이 당신의 콩에게 범위을 제공하지 않는 것입니다 다음과 같습니다. 어떤 상황에서는 괜찮 으면 좋겠지 만 @Dependent 빈을 다른 빈에 삽입하면 새 인스턴스이 생성됩니다.

다른 말로, Class A에 삽입 한 class Bclass C에 삽입 한 것과 같지 않습니다.

어떻게 해결할 수 있습니까?

예를 들어 class B@ApplicationScoped 빈으로 만들 수 있습니다. 응용 프로그램 범위는 CDi 컨테이너 부팅 (= 시작에서)까지 끝납니다. 이렇게하면 전체 애플리케이션에 하나의 인스턴스가 생기므로 빈의 상태가 사용자가 삽입 한 모든 장소에서 공유됩니다.

@ApplicationScoped 
Class B { 
    boolean b; 
    //Setter 
    //Getter 
} 

그냥 보조 노트 : 다른 대답은 여기 @Singleton를 사용하여 제안합니다. 나는 당신이 EE 환경에있는 경우 특히 반대 할 것입니다.

관련 문제