【问题标题】:Jersey 2.x @Context / Dependency Injection in ScalaJersey 2.x @Context / Scala 中的依赖注入
【发布时间】:2017-04-04 00:20:51
【问题描述】:

我想做的是为我的方法制作一个自定义球衣@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的有限理解是类声明中的所有内容都是构造函数块,所以我不能像Java中那样使用@Inject来注释MyObjectFactory构造函数方法。

我只是说这一切都错了吗?

【问题讨论】:

    标签: java scala dependency-injection jersey dropwizard


    【解决方案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 = {}
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 2013-04-19
      相关资源
      最近更新 更多