我在Java中发现了以下代码,解释了如何使用guice很好地将配置参数作为带注释的字符串参数注入。 https://github.com/google/guice/wiki/FrequentlyAskedQuestions
我想在scala中做同样的事情。 你会怎么做?
请注意我正在寻找使用通用特征/类的解决方案。
的东西trait Foo[T <- SomeOtherType] {}
class FooImpl[T <- SomeOtherType](val url: String) extend Foo[T] {}
我研究了辅助注射,但无法解决我的问题。
任何帮助将不胜感激。 感谢
答案 0 :(得分:1)
你会像在Java中那样在Scala中完成它。首先,定义注释:
/**
* Annotates the URL of the foo server.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@BindingAnnotation
public @interface FooServerAddress {}
请注意,这是Java代码;您无法在Scala中定义运行时注释。
然后绑定一个用这个注释注释的常量:
bindConstant().annotatedWith(classOf[FooServerAddress])
最后,你注入它:
class FooImpl[T] @Inject() (@FooServerAddress val url: String) extends Foo[T] {}
目标类的通用性在这里并不重要。
此外,如果您将Guice与Scala一起使用,请考虑使用scala-guice;除此之外,它允许你省略这些笨重的classOf
s。