2017-04-04 14 views
1

私がしようとしているのは、正確にはthis questionのようなカスタム・ジャージーを@Contextとしますが、Scalaではそうです。上記のポストからJersey 2.x @Contact/Dependency Injection in Scala

Javaの道:Scalaの方法をしようと

import javax.inject.Inject; 
import javax.ws.rs.container.ContainerRequestContext; 
import jetty.plugin.test.domain.MyObject; 
import org.glassfish.hk2.api.Factory; 

public class MyObjectFactory implements Factory<MyObject> { 

    private final ContainerRequestContext context; 

    @Inject 
    public MyObjectFactory(ContainerRequestContext context) { 
     this.context = context; 
    } 

    @Override 
    public MyObject provide() { 
     return (MyObject)context.getProperty("myObject"); 
    } 

    @Override 
    public void dispose(MyObject t) {} 
} 

@Inject注釈を置く場所

class MyObjFactory(ctr: ContainerRequestContext) extends Factory[MyObj] { 
    private final val context: ContainerRequestContext = ctr 

    override def provide(): MyObj = context.getProperty("customObj").asInstanceOf[MyObj] 

    override def dispose(obj: MyObj): Unit = { } 
} 

ここでの問題は、私にはわかりませんさ。スカラの私の限られた理解は、クラス宣言のすべてがコンストラクタブロックであるため、MyObjectFactoryのJavaのようなコンストラクタメソッドに注釈を付けるのに@Injectを使用することはできません。

私はちょうどこれについてすべて間違っていますか?

答えて

1

注釈は、コンストラクタで行く:

import javax.inject.Inject 

class MyObjFactory @Inject()(ctr: ContainerRequestContext) extends Factory[MyObj] { 

    private final val context: ContainerRequestContext = ctr 

    override def provide(): MyObj = context.getProperty("customObj").asInstanceOf[MyObj] 

    override def dispose(obj: MyObj): Unit = {} 

}