0

Spring フレームワークと Java の世界では、私が使用する興味深いオブジェクト コレクター パターンがあります。たとえば、以下を検討してください-

public interface Calculator {
    SomeOutput calculate(SomeInput input);
}

@Component
public class CalImpl1 implements Calculator {
 public SomeOutput calculate(SomeInput input){
  //some implementation
 }
}

@Component
public class CalImpl2 implements Calculator {
 public SomeOutput calculate(SomeInput input){
  //some implementation
 }
}

これで、Spring DI を使用して別のクラスに簡単に注入できます

@Component
public class Main {

 //This line collects all to implementors of this and set it here.
 @Autowired
 public List<Calculator> calculators;

 //other methods
}

今の問題は、同じことをscalaでどのように達成できるかわかりません。私はいくつかの検索を行って、scala で使用されているケーキ パターン ( http://loicdescotte.github.io/posts/scala-di/ ) を見つけましたが、上記のようなオブジェクト コレクターと同じことを達成していないようです。また、ケーキパターンで違反されると思われるオープンクローズの原則に従いたいのですが、オブジェクトコレクターを使用すると簡単に達成できます。

scala での実装のように同じオブジェクト コレクターを実現する方法はありますか?

4

2 に答える 2

0

Play、Akka、Scala アプリケーションで spring DI を使用したイラストを示す lightbend activator のテンプレートがあります。これを参照してください: https://www.lightbend.com/activator/templates#filter:spring

Spring を DI として使用したことはありません。通常は Guice (play フレームワーク 2 のデフォルトであるため明示的に使用) と Implicits パラメーターの両方をコンパイル DI として使用します。

サンプル:

class B

class X(x: Int)(implicit c: B)

//DI - mostly define in main method/application

implicit val c: B = new B
val x = new X(2)
于 2016-10-07T08:11:27.177 に答える