2017-05-31 9 views
0

@ResourceタイプのインスタンスのコンストラクタベースのCDI注入は可能ですか?@Resourceを使用したCDIコンストラクタベースの注入

私は以下のクラスを持っている:

class MyClass { 

    @Resource 
    private ManagedExecutorService executorService; 

    @Inject 
    private MyService myservice; 

} 

私はこのようなものに変換したい:これは、ユニットテストのクラスは不変かつ容易になるだろう

class MyClass { 

    private final ManagedExecutorService executorService; 
    private final MyService myservice; 

    @Inject 
    MyClass(ManagedExecutorService executorService, MyService myService) 
    { 
    this.executorService = executorService; 
    this.myService = myService; 
    } 

} 

。問題は、executorServiceを@Resourceアノテーションで取得する必要があるため、コンストラクタ経由で注入可能ではないように見えることです。ここで

答えて

0

は私がやってしまったものです - 私は、リソースオブジェクトの管理するプロデューサークラスを作成しました:

public class ExecutorServiceProducer { 

    @Resource 
    private ManagedExecutorService managedExecutorService; 

    @Produces 
    @Managed 
    public ExecutorService createManagedExecutorService() { 
     return managedExecutorService; 
    } 

} 

を、私はこのカスタム注釈作成:

@Qualifier 
@Retention(RUNTIME) 
@Target({TYPE, METHOD, FIELD, PARAMETER}) 
public @interface Managed { 
} 

をして、私がすることができました私のクラスに次のように注釈を付けてください:

class MyClass { 

    private final ExecutorService executorService; 
    private final MyService myservice; 

    @Inject 
    MyClass(@Managed ExecutorService executorService, MyService myService) 
    { 
    this.executorService = executorService; 
    this.myService = myService; 
    } 

} 

このようにして、 wn ExecutorService(非コンテナ管理)インスタンス。

関連する問題