2016-11-14 13 views
0

私は、次のようなプライベート既定のコンストラクタおよびパブリック・インスタンス・ゲッターを持つシングルトンクラスがあります。Javaの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アノテーション(ライブラリ)はいつ入手しますか? –

答えて

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"); 
    } 
} 

このようにして、アプリケーション全体に対して1つの@Injectable CDI Beanが作成されます。基本的に無料のシングルトン。

0

あなた@Inject MyClass myClassしかし、あなたは本当にそれは完全な管理Beanことに切り替える必要があるときには、Beanとしての利用可能その後、同様

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

プロデューサーを使用することができます。

0

CDIには@Singletonステレオタイプがあります。プロデューサやその他の方法でこの動作をエミュレートする代わりに、これを使用します。

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

} 

完了!他に必要なものはありません。

関連する問題