我要做的是为我的方法制作一个自定义球衣@Context
,与this question完全相同,但在Scala中。
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
来注释MyObjectFactory
构造函数方法,就像在Java中一样。
我只是这样做错了吗?
答案 0 :(得分: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 = {}
}