2017-04-04 43 views
1

我正在做的是爲我的方法制作一個定製球衣@Context,完全像this question,但是在Scala中。從上面的帖子Jersey 2.x @ Scala上的@Context/Dependency Injection

的Java方法:

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) {} 
} 

嘗試Scala的方式:

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 = { } 
} 

這裏的問題是,我不知道放在哪裏@Inject註解。我對Scala的有限理解是類聲明中的所有內容都是構造塊,所以我不能使用@Inject來註釋類似於Java的MyObjectFactory構造函數方法。

我只是想說這全錯了嗎?

回答

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 = {} 

}