2016-03-29 9 views
0

私はTwitterのScalaクラスを使ってBeanを作成しようとしています。そのコンストラクタ引数は単純型ではなく、Scala Function1型です。どのように私はそれを作成することができますか?SpringとScala - Function1のコンストラクタ - arg

<bean id="permissivePolicy" class="com.twitter.finagle.http.filter.Cors.Policy"> 
</bean> 

このクラスのコンストラクタの引数は次のとおりです。

、春の豆で、私は種類のコンストラクタ-引数を渡す必要があることを意味
case class Policy(
    allowsOrigin: String => Option[String], 
    allowsMethods: String => Option[Seq[String]], 
    allowsHeaders: Seq[String] => Option[Seq[String]], 
    exposedHeaders: Seq[String] = Nil, 
    supportsCredentials: Boolean = false, 
    maxAge: Option[Duration] = None 
) 

1. allowsOrigin - Function1<String, Option<String>> 
2. allowsMethods - Function1<String, Option<Seq<String>>> 
3. allowsHeaders - Function1<Seq<String>, Option<Seq<String>>> 
4. exposedHeaders - Seq<String> 
5. supportsCredentials - boolean 
6. maxAge - Option<Duration> 

私はうまくないんだけどScalaでは逆順になっているので、このBeanの作成方法についてはわかりません。何か案は?

答えて

0

最後にこれをソートしました。私は最初のScala-utilののapplication.xmlを追加する必要がありました:

<?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:scala-util="http://www.springframework.org/schema/scala/util" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd 
      http://www.springframework.org/schema/scala/util 
      http://www.springframework.org/schema/scala/util/scala-util.xsd"> 

私も(基本的には単なるインターフェイスである)機能1形質のScalaの実装を作成するために必要な:

package com.test.util 

    class Function1Impl extends Function1[String, Option[String]] { 
     override def apply(v1: String): Option[String] = Some("") 
    } 

さて、戻っapplication.xmlに、私は、コンストラクタの引数と一致するために必要な豆を作成し、permissivePolicy豆それらを参照して作成しました:

 <bean id="scalaOptionBean" class="scala.Some"> 
     <constructor-arg value="" /> 
     </bean> 
     <bean id="function1Bean" class="com.test.util.Function1Impl" /> 
     <scala-util:seq id="scalaSeqBean" /> 

     <bean id="permissivePolicy" class="com.twitter.finagle.http.filter.Cors.Policy"> 
     <constructor-arg ref="function1Bean" /> 
     <constructor-arg ref="function1Bean" /> 
     <constructor-arg ref="function1Bean" /> 
     <constructor-arg ref="scalaSeqBean" /> 
     <constructor-arg type="boolean" value="true" /> 
     <constructor-arg ref="scalaOptionBean" /> 
     </bean> 

     <bean id="httpFilter" 
      class="com.twitter.finagle.http.filter.Cors.HttpFilter"> 
     <constructor-arg ref="permissivePolicy" /> 
     </bean> 

essentてくれポリシーオブジェクトを与えました空のコンストラクタ - 正しい型の引数。ある時点で値を設定したい場合は、Function1Implを変更するか、application.xmlの値を調整するだけです。

関連する問題