2016-11-14 5 views
0

나는 다음과 같은 개인 기본 생성자 및 공공 인스턴스 게터가있는 싱글 톤 클래스가 있습니다자바 CDI 및 개인 생성자

public class MyClass { 
    private static MyClass INSTANCE = new MyClass(); 

    private MyClass() {} 

    public static MyClass getInstance() { 
     return INSTANCE; 
    } 
} 

이 클래스에 대한 의존성 주입을 가능하게 CDI를 사용하는 방법이 있나요를, getInstance() 메소드에서 반환 된 값을 사용하도록 컨테이너에 지시하겠습니까? 클래스에 액세스하는 모든 응용 프로그램이 서블릿 컨테이너에있는 것은 아니므로 인스턴스 가져 오기 방법은 여전히 ​​이러한 상황에서 사용해야합니다.

+0

Spring을 사용합니까? –

+0

이 앱에 없음 – Nixx

+0

@Model annotation (library)은 언제받을 수 있습니까? –

답변

0

CDI를 사용하고 싶습니다. 다음을 시도하십시오 :

@ApplicationScoped 
@Named //necessary only if you want to refer to by name binding on JSF 
public class MyClass { 
    @PostConstruct 
    public void afterCreate() { 
     System.out.println("Object created"); 
    } 
} 

이렇게하면 전체 응용 프로그램에 대해 @Inject 가능 CDI 빈을 갖게됩니다. 기본적으로 무료 싱글 톤. 당신이 @Inject MyClass myClass하지만 당신이 정말로 전체 관리 빈 수를 전환해야 할 때

0

당신은 빈으로 다음 사용 가능한 프로듀서뿐만 아니라

@Produces @ApplicationScoped 
private static MyClass INSTANCE = new MyClass(); 

를 사용할 수 있습니다.

0

CDI에서 사용할 수있는 @Singleton 스테레오 타입이 있습니다. 프로듀서 또는 다른 방법으로이 동작을 에뮬레이트하는 대신 이것을 사용하십시오.

@Named 
@Singleton 
public class MyClass { 
@Inject 
private Foo injectedFoo; 

} 

완료! 그 외 필요한 것은 없습니다.